我不明白以下代码的输出结果是3吗?
我得到n%= 5的输出4转到else语句。 所以应该返回rec(4-1)+ rec(4-2) 那么这将如何输出3?
def rec(n):
n %= 5
if n <= 1:
return n
else:
return rec(n-1) + rec(n-2)
print(rec(9))
输出:3
我不明白以下代码的输出结果是3吗?
我得到n%= 5的输出4转到else语句。 所以应该返回rec(4-1)+ rec(4-2) 那么这将如何输出3?
def rec(n):
n %= 5
if n <= 1:
return n
else:
return rec(n-1) + rec(n-2)
print(rec(9))
输出:3
当我在代码上进行一些测试时,输入的值将n重新定义为3。这将执行else语句,该语句为rec(3-1)生成值2,为rec(3-2)生成值1。 )。该函数具有返回值2 + 1的功能,这是3输出的来源。
,解决此类问题的最佳方法是跟踪递归调用:
rec(9):
n = 4 # ( 9 % 5)
return (rec(3) + rec(2)) # rec(n-1) + rec(n-2)
rec(3):
n = 3
return rec(2) + rec(1) # rec(n-1) + rec(n-2)
rec(2):
n = 2
return rec(1) + rec(0)
rec(0) = 0
rec(1) = 1
rec(2) = 1
rec(3) = 2
因此rec(9) = 3