了解简单的递归函数

我不明白以下代码的输出结果是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

b167521 回答:了解简单的递归函数

当我在代码上进行一些测试时,输入的值将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

本文链接:https://www.f2er.com/3169748.html

大家都在问