これは、数値の桁の合計を取得する関数です。
int sumOfDigits(int n)
{
int sum=0; //line 1
if(n==0)
return sum;
else
{
sum=(n%10)+sumOfDigits(n/10); //line 2
// return sum; //line 3
}
}
このコードを書いているときに、ローカル変数のスコープが関数の個々の再帰に対してローカルであることに気付きました。n=11111
では、再帰ごとに 5 つsum
の変数が作成され、スタックにプッシュされると言うのは正しいでしょうか? これが正しい場合、ループを使用して通常の関数で再帰を使用できる場合、再帰を使用する利点は何ですか?したがって、1つのメモリ位置のみを上書きしますか? ポインターを使用すると、再帰はおそらく通常の関数と同様のメモリを使用します。
2 番目の質問です。この関数は毎回正しい結果を返しますが、再帰 (0 を返す最後のものを除く) が 3 行目のコメントを外さないとどのように値を返すかわかりません (gcc で geany を使用)。
プログラミング初心者ですので、間違っていたらご容赦ください。