Не получается написать рекурсивную функцию [закрыт]
Учебные задания допустимы в качестве вопросов только при условии, что вы пытались решить их самостоятельно перед тем, как задать вопрос. Пожалуйста, отредактируйте вопрос и укажите, что именно вызвало у вас трудности при решении задачи. Например, приведите код, который вы написали, пытаясь решить задачу
Закрыт 4 года назад .
Помогите написать рекурсивную функцию, которая раскладывает число на простые сомножители. Например, 378 = 2*3*3*3*7
Разложить число на простые сомножители
Разложить число на простые множители
Разложить число на простые множители, помогите с задачей пожалуйста!
Разложить заданное число на простые множители
Разложить заданное число на простые множители.
Разложить заданные числа на простые сомножители
помогите! 1. Разложить заданные числа на простые сомножители. 2. Подсчитать 1 — 1/2 + 1/3 — 1/4.
Напишите рекурсивную функцию, которая раскладывает число на простые сомножители
38) Напишите рекурсивную функцию, которая раскладывает число на простые сомножители. Пример.
Разложить число на простые множители, определить функцию, распознающую простые числа
Помогите, пожалуйста с программой. Разложить натуральное число n на простые множители. Определить.
Разложить число на простые множители (длинное число)
Нужно разложить число с количеством до ста символов на простые множители, например число.
Разложить число на простые множители
Приветствую друзья. Вынужден обратиться к вам по очень накипевшей проблеме. необходимо написать.
Разложить число на простые множители
Помогите решить задачу 1.Дано целое число Х. Разложить его на простые множители. 2.Дан.
Разложить число на простые множители
Разложить число на простые множители: 30 -> (2 3 5) Прокомментируйте код: (defun prime1 (X).
Разложить число на простые множители
Необходимо разложить число на простые множители. program prostie_mnozhiteli; var n,i:longint;.
Рекурсивная программа Python для простого разложения числа
Я написал следующую программу для простого разложения на числа:
Ниже приведен вывод, который я получаю:
Altho ‘, возвращаемое значение печатается правильно, после возвращенного значения, кажется, не печатает ничего, все время. Что мне не хватает?
Кроме того, как я могу улучшить программу (продолжая использовать рекурсию)
5 ответов
Ваша функция prime_factorize не имеет оператора return в рекурсивном случае — вы хотите вызвать «return prime_factorize (x / i, li)» в его последней строке. Попробуйте сделать это с простым номером (чтобы рекурсивный вызов не требовался), чтобы убедиться, что он работает в этом случае.
Также вы, вероятно, хотите сделать подпись что-то вроде:
В противном случае вы получите неправильные результаты при вызове его два или более раз:
Более функциональная версия.
@ Энтони правильно ответил на ваш первоначальный вопрос о print . Однако, в духе нескольких советов, которые также были предложены, вот простая рефакторизация с использованием хвостовой рекурсии:
Это не решает важные проблемы производительности (поведение big-O такое же, как и в исходном решении), но поскольку сам Python не выполняет оптимизацию хвостовой рекурсии, важно научиться делать это вручную.
«Измените [не базовый случай] рекурсивные шаги ‘return thisfun(newargs)’ на args=newargs; continue и поместите все тело в цикл while True: » — основная идея оптимизации хвостовой рекурсии. Здесь я также сделал li неаргомом (без причины быть аргументом), наложил условие на while и избежал continue , так как рекурсивный шаг был в конце тело в любом случае.
Эта формулировка послужит хорошей основой для дальнейшего оптимизации оптимизации рефакторинга (избегание, напоминание и т. Д.) Для достижения более высокой производительности.
Если вы хотите сделать это полностью рекурсивным, я бы порекомендовал этот код, он действительно возвращает правильный ответ, и способ его работы довольно ясен. Если вы хотите сделать программу максимально эффективной, я бы порекомендовал вам придерживаться одного из ваших предыдущих методов.
Программа разложения числа на простые множители в Python
В этом руководстве мы обсудим, как получить простой множитель данного числа с помощью программы разложения числа в Python. Все мы знакомы с простыми числами – это числа, которые можно разделить на единицу или на себя. Например – 1, 2, 3, 5, 7, 11, 13, ……
Нахождение всех простых множителей числа
Если пользователь вводит число как 12, то на выходе должно быть 2, 2, 3, а если на входе 315 – выход должен быть «3 3 5 7». Программа должна вернуть все простые множители данного числа. Простые множители 330 – это 2, 3, 5 и 11. Следовательно, 11 является наиболее значимым простым множителем 330.
Например: 330 = 2 × 3 × 5 × 11.
Прежде чем писать программу на Python, давайте разберемся со следующими догадками.
- 1-я гипотеза – может быть хотя бы один простой множитель, который будет меньше √n в случае, если n не является простым числом.
Доказательство. Существуют два больших числа sqrt(n), их произведение также должно делить n, но оно будет превышать n, что противоречит нашему предположению. Таким образом, не может быть более одного простого множителя n, большего, чем sqrt(n).
Давайте посмотрим на следующий шаг, чтобы выполнить такую операцию.
- 2-я гипотеза – может быть более 1 простого множителя n больше, чем sqrt(n).
Доказательство. Предположим, что есть два больших числа sqrt(n), тогда их произведение также должно делить n, но оно будет больше n, что противоречит нашему предположению. Таким образом, не может быть более одного простого множителя n, большего, чем sqrt(n).
Давайте посмотрим на следующий шаг, чтобы выполнить такую операцию.
Пример – программа Python для печати простых множителей.
В приведенном выше коде мы импортировали математический модуль. Функция prime_factor() отвечает за печать составного числа. Сначала мы получаем четные числа; после этого все оставшиеся простые множители должны быть нечетными. В цикле for число должно быть нечетным, поэтому мы увеличили i на два. Цикл for будет вычислять квадратный корень n раз.
Давайте разберемся в следующем свойстве составных чисел.
Каждое составное число имеет хотя бы один простой множитель, меньший или равный квадратному корню.
Программа будет работать следующим образом:
- На первом шаге найдем наименьший простой множитель i.
- Вхождение i будет удалено из n путем многократного деления n на i.
- Повторим оба вышеуказанных шага для деления n и i = i + 2. Оба шага будут повторяться до тех пор, пока n не станет либо 1, либо простым числом.
Давайте разберемся в другом примере, где мы находим наибольший простой множитель данного числа.
Пример – 2: Программа Python для определения наибольшего простого множителя заданного числа.