我一直试图理解下面的代码片段,但并不完全得到输出背后的逻辑.
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?
递归将如下进行:
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)在递归调用".