与递归有关的问题

Mad*_*ddy 0 c recursion

请找到下面的代码,其中显示了一些基于递归的操作.我希望有人能解释一下这个递归是如何工作的吗?

#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.请有人解释这个展开操作是如何在堆栈中发生的

unw*_*ind 6

你不需要涉及堆栈或任何展开(不过请原谅我参与其中).

只需用函数的内容替换调用,并继续这样做,直到你不再递归为止:

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)

排版有点困难,但这就是发生的事情,答案似乎与你所得到的相匹配.