C/C++函数递归

Shi*_*hat 3 c c++ recursion

我一直试图理解下面的代码片段,但并不完全得到输出背后的逻辑.

int Func(int x, int y){
    if (x < y)
        return 0;
    else
        return Func(x - y, y) + 1;
}

int main()
{
    int x = 50, y=10;
    printf("%d  \n",Func(x,y));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面程序的输出显然是5.任何人都可以告诉我递归类型方法实际上意味着什么"+1"(in return Func(x - y, y) + 1;)以及它如何有执行流程.

如果我只是执行return Func(x-y,y);然后输出为0,这很好.但是为什么第一种情况下输出为5?

md5*_*md5 9

递归将如下进行:

Func(x = 50, y = 10) x >= y 
  Func(x = 40, y = 10) x >= y
    Func(x = 30, y = 10) x >= y
      Func(x = 20, y = 10) x >= y
        Func(x = 10, y = 10) x >= y
          Func(x = 0, y = 10) x < y
          return 0
        return Func(x = 0, y = 10) + 1 = 1
      return Func(x = 10, y = 10) + 1 = 2
    return Func(x = 20, y = 10) + 1 = 3
  return Func(x = 30, y = 10) + 1 = 4
return Func(x = 40, y = 10) + 1 = 5
Run Code Online (Sandbox Code Playgroud)

+1用于地说:"加1,通过计算出的结果Func(x - y, y)在递归调用".