Нахождение кратных с использованием рекурсии

Для чисел от 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));
Другие вопросы по тегам