Skip to content
On this page

再帰関数

関数の中で関数を呼び出すことができる。

cpp
#include <iostream>
using namespace std;

void printAll(int n) {
    if (n <= 0) return;
    cout << n << endl;
    printAll(n-1);
}

int main() {
    printAll(3);
}
[output]
3
2
1

かなり長いが、フローチャートで表すと下図のようになる。

null

気をつけるべきことは、複数ある printAll(int n) はそれぞれ独立して変数を持っているということである。

関数の中で関数を書くと、循環参照みたいなイメージがあって混乱するかもしれない。 そのような時は、1ステップずつ操作を確認していくとわかりやすいだろう。 今回は、各ステップに cout を挟んで、出力を確認しながら確かめてみる。

cpp
#include <iostream>
using namespace std;

void printAll(int n) {
    cout << "L5: n=" << n << endl;

    if (n <= 0) return;
    cout << "L8: n=" << n << endl;

    cout << n << endl;
    cout << "L11: n=" << n << endl;

    printAll(n-1);
    cout << "L14: n=" << n << endl;
}

int main() {
    cout << "L18: in main function" << endl;
    printAll(3);
    cout << "L20: in main function" << endl;
}
[output]
L18: in main function
L5: n=3
L8: n=3
3
L11: n=3
L5: n=2
L8: n=2
2
L11: n=2
L5: n=1
L8: n=1
1
L11: n=1
L5: n=0
L14: n=1
L14: n=2
L14: n=3
L20: in main function