再帰関数

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
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

ちゃんと計算が行われています。

スポンサーリンク
 
スポンサーリンク