正しくは、書き直した記事を上げました。こちらを参照ください。
C言語 階乗を求めるコード - Qiita
https://qiita.com/Kchan_01/items/594a49508d13999d0bb1
以下は記録用、間違ったコード
自分のコード(間違いがあります、詳しくはコメント欄を参照)
int factorial(int n){
if(n > 0){
return n * factorial(--n);
} else {
return n + 1;
}
}
解説のコード
int factorial(int n){
if(n == 1){
return 1;
} else {
return n * factorial(n - 1);
}
}
所感
※解釈に間違いがあったので、注釈やコメント欄を参照してください。
解説のコードn == 1というのが階乗のゴールを表していて、わかりやすい1。__ベースケース__を意識して書かれている。
最大の数、最小の数を意識して、全体像を見通して書くことで、綺麗に書ける。
自分のコードの場合は、階乗の0の場合もループしているので、ループの数が1回多くなっている。
そのため、return n + 1というイマイチな書き方になっている。
インクリメントで書くのもよいが2、この場合はn-1としたほうが、見た的にわかりやすかったと思う。
まとめ
再帰を使う場合は、関数を終了する停止点である__ベースケース__を意識すること。