2017-04-22 14 views
-2

私が解決している問題は、ユーザーによって数値入力を受け取り、私は負の数に達するまで私がその番号に戻るまで5でバックアップしてください。私はループを全く持たない再帰のみを使用してこれを行う必要があります。コードの継ぎ目は、大部分の権利のために動作するように値が0この再帰では何が起こっていますか?私はカウントダウンする必要があります/ループなしの再帰を使用して

void Func(int num, int base, bool flipped) 
{ 
    cout << num << endl; 

    if (flipped == false && num > 1) 
    { 
     Func(num - 5, base, flipped); 
    } 

    flipped = true; 

    if (num < base) 
    { 
     Func(num + 5, base, true); 
    } 

    return; 
} 

で周りのバックフリップをするまで、私は17の入力に上記のコードから取得しています出力は次のようになります。 17、 12、 7、 2、 -3、 2、 7、 12、 17、 7、 12、 17、 12、 17、

何らかの理由で2回目の再帰に問題があるようです。私がこれまでに試したことは、ブールを静的にして、どこでもreturn文を追加することです。何か助けてくれてありがとう!

+4

してください[あなたのゴム製のアヒルとの約束を作る](https://en.wikipedia.org/wiki/Rubber_duck_debugging)。 –

+0

どのようなデバッガを使用していますか? Visual C++の場合は、コールスタックペインが役立ちます。 – sergiol

+0

あなたが戻ってきた場所とどこにいないのかをメモしてください。他のすべての再帰呼び出しが終了したら、何が起きてその時点に戻りますか? –

答えて

0

はこれを試してみてください:

#include <cstdlib> 
#include <iostream> 

int recount(int num) 
{ 
    std::cout<<num<<'\n'; \\Prints the current num 
    if(num >= 0) \\checks that num is positive 
    { 
    \\recursively call the function counting down by 5 
    std::cout<<recount(num-5)<<'\n'; 
    } 
    \\count up by 5 as we go back up 
    return num + 5; 
} 

int main() 
{ 
    recount(17); \\ gives desired output 
    return EXIT_SUCCESS; 
} 
関連する問題