Helpers - компьютеры, интернет, программирование

Разложение целого числа в сумму строго положительных целых чисел

Мне нужно написать функцию в OCaml partitions: int -> int, которая вычисляет количество способов записать строго положительное целое число n в виде суммы строго положительных целых чисел. Мне удалось написать функцию, которая возвращает количество способов записать n в виде суммы k целых чисел, но я не могу сделать это для всех k. Вот мой код:

let rec partition n k =
match k with
    | k when k > n -> 0
    | k when k = n -> 1
    | 1 -> 1
    | _ -> (partition (n-1) (k-1)) + (partition (n-k) k);;

let partitions n = 
let result = 0 in 
for i = 1 to n do result = result + i done; result;;

Моя функция partition n k работает, но моя функция partitions n (та, которую я должен сделать) не работает...

Спасибо за вашу помощь !


Ответы:


1

Я отмечаю, что первый вызов в цикле функции partitions, предоставляемой @NathanFallet, предназначен для k = 0. Вы можете поработать с кодом, чтобы увидеть, что происходит, когда k = 0.

(Подсказка: ваша функция partition в этом случае не работает. Это вполне разумно, поскольку вы не можете получить положительную сумму, сложив вместе 0 чисел.)

06.03.2021
  • Вы правы, тогда было бы лучше начать с k = 1 06.03.2021

  • 2

    Попробуйте использовать эту функцию разделов:

    let partitions n = 
    let result = ref 0 in 
    for i = 1 to n do result := !result + (partition n i) done; !result;;
    

    Я заменил результат ссылкой, чтобы иметь возможность изменить его значение, а затем суммировал количество разделов для каждого i от 1 до n для n и возвращал эту сумму

    06.03.2021
  • Во-первых, спасибо за ваш ответ. Я пробовал это для своей функции разделов, но независимо от того, какое целое число n я выбираю, я получаю сообщение об ошибке Out_of_memory. Может походка была не та... 06.03.2021
  • (Как бы то ни было, никому не будет особенно полезно, если вы просто напишете за них части их домашней работы без обсуждения или объяснения.) 06.03.2021
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..