2017-02-28 10 views
2

関数が宣言される前に関数を使用するにはどうすればよいですか?C++複数の再帰関数

私は3つの関数を持っていますが、それぞれが互いにやりとりする必要がありますが、それ以前に宣言された関数を後で宣言された関数とやりとりする方法がありません。ここでは、コードです:

int f(int a){ 
    if (a==0){return 1;} 
    if (a==1){return 2;} 
    if (a==2){return 7;} 
    return 2*f(a-1)+3*f(a-2)+3*f(a-3)+6*g(a-2)+2*g(a-3)+2*h(a-2); 
} 

int g(int b){ 
    if (b==0){return 0;} 
    if (b==1){return 1;} 
    return f(b-1)+g(b-1)+h(b-1); 
} 

int h(int c){ 
    if (c==0){return 0;} 
    if (c==1){return 1;} 
    return f(c-2)+g(c-1)+g(c-2); 
} 
+4

あなたが探しているものを「前方宣言」といいます。詳細については、Googleをご覧ください。 –

+0

フォワード宣言を使用します。フォワード宣言では、関数の本体を記入することなく宣言します。 –

+0

あなたのコメントは答えではありませんか? – zett42

答えて

5

機能のみ、別の関数の名前を知っている必要があり、その引数の型とその戻り値の型は、それを呼び出すことができるように。あなたがそれを呼んだ時点で完全に実装する必要はありません。単にと宣言すると、ファンクションが最初に呼び出され、が実装されます。

// Declare before use 
int g(int b); 
int h(int c); 

// Implement here 
int f(int a){ 
    if (a==0){return 1;} 
    if (a==1){return 2;} 
    if (a==2){return 7;} 
    return 2*f(a-1)+3*f(a-2)+3*f(a-3)+6*g(a-2)+2*g(a-3)+2*h(a-2); 
} 

int g(int b){ 
    if (b==0){return 0;} 
    if (b==1){return 1;} 
    return f(b-1)+g(b-1)+h(b-1); 
} 

int h(int c){ 
    if (c==0){return 0;} 
    if (c==1){return 1;} 
    return f(c-2)+g(c-1)+g(c-2); 
}