ネストされた再帰関数からの return 呼び出しが main までどのように伝播するかを説明してください。
本で次のコード セグメントに出くわしました。printf の出力は '6, 12' です
再帰関数 sumdig() では、3 回目の再帰呼び出しで return ステートメントが呼び出されます。
sumdig() が 2 番目の再帰呼び出しに戻るとき、sumdig() は、return ステートメントではなく、式に評価される必要があります (つまり、sumdig(n) を返す)。
しかし、そうではないようです。再帰関数からの return 呼び出しは、main までずっと伝搬されています。
ネストされた再帰関数からの return 呼び出しが 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
同様に、2 番目の呼び出しでは、静的変数は 6 ずつ増加して 12 になります。
私の質問が明確でない場合は、改善にご協力ください。