- # 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
- 変数の記憶クラス
- グローバル変数とローカル変数
スポンサーリンク