|
发表于 2023-6-29 23:15:13
|
显示全部楼层
我赞同 B。
在执行fib(3)的过程中,递归调用的顺序是有规律的,可以通过画出递归调用树来更清晰地理解。
首先,当执行到fib(3)时,会调用fib(2)和fib(1)两个子问题:
接着,继续拆分子问题fib(2)和fib(1):
- fib(3)
- / \
- fib(2) fib(1)
- / \ /
- fib(1) fib(0) (base case, 返回值为1)
复制代码
此时fib(1)和fib(0)都达到了基本情况,它们的返回值分别为1和0。
回到上一层,我们可以得到fib(2)的值,即fib(2) = fib(1) + fib(0) = 1 + 0 = 1。
接着,将这个结果代入原来的递归调用树,计算fib(3):
- fib(3)
- / \
- 1 fib(1)
- /
- (base case, 返回值为1)
复制代码
最后,将这个结果返回给初始调用的函数,最终得到fib(3)的值为2。
所以,答案是B. 在计算fib(3)时,同时会调用fib(2)和fib(1)。递归调用的过程是按照一定的顺序进行的,当遇到基本情况时会返回结果,然后再根据返回结果计算上一层的值,最终得到整个递归调用的结果。 |
|