Нахождение кратных с использованием рекурсии - PullRequest
0 голосов
/ 14 января 2019

Если заданы числа от 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")

Как бы я сделал это рекурсивно?

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Как насчет кода ниже?

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 или максимальное число, которое вы хотите проверить.

0 голосов
/ 14 января 2019

Вот общая схема для выполнения простых рекурсивных вещей в 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» в начале функции для обработки базового случая, и где-то в функции вызывается функция с «меньшим» значением, вы, вероятно, столкнетесь с плохой рекурсией .

...