请解释嵌套递归函数的返回调用如何一直传播到 main?
我在一本书中遇到了以下代码段。printf 输出为 '6, 12'
在递归函数 sumdig() 中,在第三次递归调用中调用 return 语句。
当 sumdig() 现在返回到第二个递归调用时, sumdig() 应该计算为一个表达式,而不是返回语句(即 return sumdig(n))。
但事实并非如此。递归函数的返回调用一直传播到 main。
谁能解释嵌套递归函数的返回调用如何一直传播到main?
如果递归调用类似于'return sumdig(n)',那么下面的代码对我来说是有意义的。
main()
{
int a, b;
a = sumdig( 123 );
b = sumdig( 123 );
printf( "%d, %d\n", a, b);
}
sumdig(int n)
{
static int s = 0;
int d;
if(n != 0)
{
d = n % 10;
n = (n - d) / 10;
s = s + d;
sumdig(n);
}
else
return(s);
}
Sumdig 的递归调用
Initial call :n = 123, s = 0
First recursive call :n = 12, s = 3
Second recursive call :n = 1, s = 5
Third recursive call :n = 0, s = 6 // Return statement happens here
同样对于第二次调用...静态变量将再次增加 6 变为 12。
如果我的问题不清楚,请帮助我改进。