***
1262 ワード
再帰とは何ですか.
すなわち、この関数はそれ自体を呼び出し、この呼び出しプロセスを再帰と呼ぶ.
再帰はループに相当するので、再帰を終了するには、再帰を終了する条件テスト部分が必要です.そうしないと、無限再帰(すなわち無限ループ)が発生します.また、これも再帰を使用する難点です.
ケース出力結果: レベル1コール
レベル2呼び出し
レベル3呼び出し
レベル4呼び出し
レベル4戻り
レベル3戻り
レベル2戻り
レベル1の戻り値解析: 結果から分かるように、#1および#2は、試験条件(すなわち、n<4)に適合する場合、#1は部分的に循環し、試験条件がfalseの場合、#2は部分的に循環する. .再帰関数では、再帰呼び出し前の文(すなわち1部)が、被変調関数(すなわちrecur()の順に実行される.再帰呼び出し後の文(すなわち2部)は、被変調関数とは逆の順序で実行される. 各レベルの関数呼び出しには独自の変数があり、再帰呼び出しは関数を最初から実行するコードに相当する. は、関数呼び出しのたびに1回戻り、順次逐次再帰を返す.
再帰(メリットとデメリット)とサイクル使用サイクルの場所はいずれも再帰 を使用できる.欠点: 再帰高速消費メモリ 読みとメンテナンスが不便 効率が低い の利点: 簡潔 は、階乗、逆の順序に関するプログラミング問題を解決するのに適している .
テール再帰
ちょうどreturn文の前です.
最後の再帰は、ループに相当するため、最も簡単な再帰形式です.
再帰関数から、すべてのC関数が平等であることをかすかに知ることができます.つまり、あなたは私を呼び出すことができて、私はあなたを呼び出すことができます.
PS:Xzhi本人がブログを書くのは初めてで、ブログを書く目的は他人と自分の勉強の心得を分かち合うことであり、同時に学習に対する総括と記録であり、この文章にバグがあれば、大神たちの指摘を歓迎する.
すなわち、この関数はそれ自体を呼び出し、この呼び出しプロセスを再帰と呼ぶ.
再帰はループに相当するので、再帰を終了するには、再帰を終了する条件テスト部分が必要です.そうしないと、無限再帰(すなわち無限ループ)が発生します.また、これも再帰を使用する難点です.
ケース
#include
void recur(int);
int main (void)
{
recur(1);
return 0;
}
void recur(int n) //
{
printf(" %d
", n); //#1
if (n < 4)
{
recur(n+1); //
}
printf(" %d
", n); //#2
}
レベル2呼び出し
レベル3呼び出し
レベル4呼び出し
レベル4戻り
レベル3戻り
レベル2戻り
レベル1の戻り値
再帰(メリットとデメリット)とサイクル
テール再帰
ちょうどreturn文の前です.
最後の再帰は、ループに相当するため、最も簡単な再帰形式です.
再帰関数から、すべてのC関数が平等であることをかすかに知ることができます.つまり、あなたは私を呼び出すことができて、私はあなたを呼び出すことができます.
PS:Xzhi本人がブログを書くのは初めてで、ブログを書く目的は他人と自分の勉強の心得を分かち合うことであり、同時に学習に対する総括と記録であり、この文章にバグがあれば、大神たちの指摘を歓迎する.