使用递归查找倍数

Finding multiples using recursion

给定 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")

我将如何递归执行此操作?

这里是在 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,你检查一下你是否已经到达底部,如果是,return 适当的值向上调用堆栈。如果不是,则创建一个新案例,在您的案例中,它是通常由 "loop" 构造处理的 "decrement" 逻辑。然后为当前案例做一些事情,然后在新案例上再次调用该函数。这种重复的函数调用使它成为 "recursive"。如果你在函数的开头没有一个 "if then" 来处理基本情况,并且在函数的某处调用 "smaller" 值的函数,你可能会有一个不好的递归时间。

下面的代码怎么样?

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 或您要检查的最大数量。

这个递归函数打印一个数的倍数!希望对你有帮助


def multi(n,x):
    if x == 12:
        print(n*x)
    else :
        print(n*x,end =",")
        multi(n,x+1)
print(multi(4,1));