请找到下面的代码,其中显示了一些基于递归的操作.我希望有人能解释一下这个递归是如何工作的吗?
#include <stdio.h>
int func(int);
main()
{
int ret = 0;
ret = func(6);
printf("The val is %d\n",ret);
}
int func(int m)
{
if((m==0)||(m==1))
{
return 1;
}
else
{
return (func(m-1)+func(m-2));
}
}
Run Code Online (Sandbox Code Playgroud)
执行时,val的值为13.请有人解释这个展开操作是如何在堆栈中发生的
你不需要涉及堆栈或任何展开(不过请原谅我参与其中).
只需用函数的内容替换调用,并继续这样做,直到你不再递归为止:
ret = func(6) =
func(5) + func(4) =
func(4) + func(3) + func(3) + func(2) =
func(2) + func(3) + func(1) + func(2) + func(1) + func(2) + func(0) + func(1) =
func(0) + func(1) + func(1) + func(2) + 1 + func(0) + func(1) + 1 + func(1) + func(0) + 1 + 1 =
1 + 1 + 1 + func(0) + func(1) + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 =
3 + 1 + 1 + 8 =
3 + 2 + 8 =
13
Run Code Online (Sandbox Code Playgroud)
排版有点困难,但这就是发生的事情,答案似乎与你所得到的相匹配.