C语言中与递归相关的问题

img


答案是

img


k为什么是6?
输出g=4,之后这个代码具体是怎么运行呢?

fib(4)=fib(3)+fib(2)==>fib(3)+2=fib(2)+fib(1)+2=>2+2+2=6

fib(4) = fib(3) + fib(2) = (fib(2) + fib(1)) + (fib(1) + fib(0)) = 2 + 2 + 2 + 0 = 6

递归到参数是0到2时,递归就结束了,fib(0)=0,fib(1) = fib(2) = 2

一开始g=4
然后开始递归fib(3)+fib(2)
这产生2个分支,先递归fib(3),打印g=3,又产生2个分支fib(2)+fib(1)
这里有结果了,分别return 2,所以是2+2=4
fib(2)又继续递归,fib(1)+fib(0)=2+0=2
所以k=6