- # C言語/C++入門 > 関数と変数のスコープ
再帰関数
スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
再帰的な動作を期待する場合には、再帰関数を定義する必要があります。
再帰とは、関数が関数自身を呼び出すことです。
ですので、再帰関数は、ループすることになりますので、以下の2つのルールが必要とされています。
スポンサーリンク
1.必ず終点があること。
2.呼び出されるたびに、関数による作業が減っていくこと。
2がないと終わりに向かいませんし、1がないと無限再帰になってしまいます。
階乗の計算で、再帰関数の例を見てみます。
階乗とは、数学で習ったと思いますけど、例えば「3の階乗 = 3 * 2 * 1」です。
3! = 3 * 2 * 1 = 6、となります。
#include <iostream> #include <assert.h> #include <cstring> int fn(int number) { assert(number >= 0); if (number == 0) return 1; return (number * fn(number-1)); } int fnecho(int number) { assert(number >= 0); for (int i = number; i >=1; i--) { std::cout << i; if(i > 1) std::cout << " * "; else std::cout << " = \n"; } return 0; } int main() { int num = 5; fnecho(num); std::cout << fn(num) << "\n"; return 0; }
再帰的に、fn関数が呼び出されることから、「5 * 4 * 3 * 2 * 1」の計算が行われます。
fnechoは、再帰ではなくて、計算式を出力するための関数です。
実行結果。
5 * 4 * 3 * 2 * 1 = 120
ちゃんと計算が行われています。
スポンサーリンク
<< 前の記事 : 関数の引数型/値呼び出し(値渡し)・参照呼出し(参照渡し)・配列
- - 関連記事 -
- 関数の引数型/値呼び出し(値渡し)・参照呼出し(参照渡し)・配列
- インライン関数・inline
- デフォルト引数・定義された引数を使用しない関数
- 関数のオーバーロード
- 参照型の戻り値で関数定義・参照戻し
- 参照型の引数で関数定義
- const宣言の引数を持つ関数
- 引数のない関数(void)・voidの戻り値
- 関数の定義
- using文・using namespace
- 名前空間・namespace
- 変数の記憶クラス
- グローバル変数とローカル変数
スポンサーリンク