Нахождение кратных с использованием рекурсии
Для чисел от 1 до 100, для кратных 3 следует вывести "he", для кратных 5 - "llo", для кратных 3 и 5 - "hello".
Вот что у меня есть:
for i in range (1,100):
if(i%3==0):
print("he")
elif(i%5==0):
print("llo")
elif(i%3==0 and i%5==0):
print("hello")
Как бы я сделал это рекурсивно?
3 ответа
Как насчет кода ниже?
def find_multiples(current, last_num=100):
# Base Case
if current > last_num:
return
result = ""
if current % 3 == 0:
result += "he"
if current % 5 == 0:
result += "llo"
if result:
print(f"{current}: {result}")
find_multiples(current+1, last_num)
find_multiples(1)
Базовый случай, если current
достигает last_num
или максимальное количество, которое вы хотели бы проверить.
Вот общая схема для выполнения простых рекурсивных вещей в Python:
BASE_CASE = 1 #TODO
def f(current_case):
if current_case == BASE_CASE:
return #TODO: program logic here
new_case = current_case - 2 #TODO: program logic here ("decrement" the current_case somehow)
#TODO: even more program logic here
return f(new_case) + 1 #TODO: program logic here
Конечно, это не обрабатывает все возможные рекурсивные программы. Впрочем, это подходит как вашему делу, так и многим другим. Вы бы позвонили f(100)
, 100
было бы current_value
Вы проверяете, дошли ли вы до конца, и если да, верните соответствующее значение в стек вызовов. Если нет, вы создаете новый случай, который, в вашем случае, является логикой "декремента", обычно обрабатываемой конструкцией "цикла". Затем вы делаете что-то для текущего случая, а затем снова вызываете функцию для нового случая. Этот повторный вызов функции делает ее "рекурсивной". Если у вас нет "if then" в начале функции для обработки базового случая, и где-то в функции вызывается функция с "меньшим" значением, вы, вероятно, столкнетесь с плохой рекурсией,
Эта рекурсивная функция печатает кратные числа! Надеюсь, поможет
def multi(n,x):
if x == 12:
print(n*x)
else :
print(n*x,end =",")
multi(n,x+1)
print(multi(4,1));