2017-03-22 14 views
0

再帰関数はどのようにしてprintCountRec(dist-1)+ printCountRec(dist-2)を返しますか?次のコードで動作します。私のロジックによってprintCountRec(dist-1)関数呼び出しは1を返し、printCountRec(dist-2)はこれら2つを加算することによって0を返します。答えは1 + 0すなわち1でなければなりませんが、3として答えを得ています。それを得る。2再帰関数の追加の仕組み

距離をカバーする方法の数のためのプログラム;これは私があなたの再帰以下てる方法です

#include <iostream> 
using namespace std; 


int printCountRec(int dist) 
{ 
    // Base cases 
    if (dist<0) return 0; 
    else if (dist==0) return 1; 

    // Recur for all previous 3 and add the results 
    else return printCountRec(dist-1) + printCountRec(dist-2); 

} 

int main() 
{ 
    int dist = 3; 
    cout << printCountRec(dist); 
    return 0; 
} 
+0

なぜこれをCでタグ付けしましたか?これは有効なCコードではありません。また、デバッガを使用して、コードを実行して何をしているのかを理解することを学ぶ必要があります。 – UnholySheep

+0

デバッガでコードをステップ実行する必要があります。それはプログラムの流れを正確に示してくれます。 – NathanOliver

答えて

2

follows-として コードは次のとおりです。

printCountRec(-1) = 0 
printCountRec(0) = 1 
printCountRec(1) = printCountRec(0) + printCountRec(-1) = 1 
printCountRec(2) = printCountRec(1) + printCountRec(0) = 2 
printCountRec(3) = printCountRec(2) + printCountRec(1) = 3 
0

printCountRec(のdist-1)関数呼び出しが返され1とprintCountRec(dist- 2)は0を返します

あなたはこれをどのように想定しましたか?ステップバイステップ:

  • printCountRec(dist-1)

    printCountRec(1) + printCountRec(0)を呼び出しますprintCountRec(2)、を意味します。これらの2つの場合、最初はprintCountRec(0) + printCountRec(-1)となり、printCountRec(2)には1+0 = 1が返され、2番目の行はprintCountRec(2)に1を返します。
    printCountRec(dist-1) = printCountRec(2) --> 
    printCountRec(1) + printCountRec(0) --> 
    printCountRec(0) + printCountRec(-1) + 1 --> 
    1 + 0 + 1 --> 3 
    

    だからほかの最初のメンバーが2に評価されます。つまり

    あなたはこの順序を持​​っています。

  • printCountRec(dist-2)printCountRec(1)1+0 = 1を返す、printCountRec(0) + printCountRec(-1)を呼ぶであろう、printCountRec(1)を意味します。

    あなたはこの順序を持​​っている言い換えれば

    printCountRec(dist-2) = printCountRec(1) --> 
    printCountRec(0) + printCountRec(-1) --> 
    1 + 0 --> 1 
    

    だから、ほかの第二の部材が1に評価されます。

二つの部材(21)を追加すると、あなたの結果3を与えます。

0

DIST = -1 0を出力

DIST = 0を出力する1

DIST = 1を出力する1

DIST = 2つの出力2

DIST = 3つの出力3

printCountRec(2)= printCountRec(1)+ printCountRec(0)= 2

printCountRec(3)= printCountRec(2)+ printCountRec(1)= 2 + 1 = 3。

関連する問題