【发布时间】:2017-02-20 07:45:54
【问题描述】:
检查以下代码:
>>> def fib(x):
... if x == 0 or x == 1:
... return 1
... else:
... return fib(x-1) + fib(x-2)
>>> print(fib(4))
根据 SoloLearn Python 教程(用于递归)中的 cmets,代码的工作方式如下:
1. fib(4) = fib(3) + fib(2)
2. = (fib(2) + fib(1)) + (fib(1) + fib(0))
3. = fib(1) + fib(0) + fib(1) + fib(1) + fib(0)
4. = 1+ 1 + 1 + 1 + 1
5. = 5
在第 2 行之后,只有 fib(2) 应该转到 fib() 函数的 else 部分,对吗?
两个fib(1) 和一个fib(0) 满足fib() 函数的if 部分的条件。所以返回 1。我的问题是,为什么在第 3 行中,fib(1) + fib(0) + fib(1) + fib(1) + fib(0) 都被替换为 1 然后添加?
请原谅我问了这么一个菜鸟问题。
【问题讨论】:
-
因为所有这些调用都解析为第一个子句。