C の再帰
再帰とは、関数の定義の中で関数そのものを使用する方法を指します。
例:
昔々、山があって、その山にお寺がありました。お寺に老僧がいて、若い僧侶に話をしていました。何の話ですか? 「むかしむかし、山があって、その山にお寺がありました。お寺に年老いた僧侶がいて、若い僧侶に物語を語っていました。その物語は何ですか?」山があって、その山にお寺がありました。お寺には老僧がいて、小さな僧侶に物語を語っていました。 .'"
構文形式は次のとおりです:
void recursion(){ recursion(); /* 函数调用自身 */}int main(){ recursion();}
C 言語は再帰をサポートしています。つまり、関数はそれ自体を呼び出すことができます。ただし、再帰を使用する場合、プログラマは関数を終了するための条件を定義することに注意する必要があります。そうしないと無限ループに陥ってしまいます。
再帰関数は、数値の階乗の計算、フィボナッチ数列の生成など、多くの数学的問題を解決する上で重要な役割を果たします。
数値の階乗
次の例では、再帰関数を使用して、指定された数値の階乗を計算します。
#include <stdio.h>double factorial(unsigned int i){ if(i <= 1) { return 1; } return i * factorial(i - 1);}int main(){ int i = 15; printf("%d 的阶乘为 %f\n", i, factorial(i)); return 0;}
上記のコードがコンパイルされて実行されると、次の結果が生成されます:
15 的阶乘为 1307674368000.000000
フィボナッチ数列
次の例では、再帰関数を使用して、指定された数値のフィボナッチ数列を生成します。
#include <stdio.h>int fibonaci(int i){ if(i == 0) { return 0; } if(i == 1) { return 1; } return fibonaci(i-1) + fibonaci(i-2);}int main(){ int i; for (i = 0; i < 10; i++) { printf("%d\t%n", fibonaci(i)); } return 0;}
上記のコードをコンパイルして実行すると、次の結果が生成されます:
0112358132134