2016-12-07 6 views
-1

誰もがこのプログラムが最終的な出力として8になって、私の脳が揚げられていることを理解するのを助けることができます!C++での再帰の例

#include <iostream> 
#include <string> 
using namespace std; 
int unknown(int x); 

int main() 
{ 
    cout << unknown(1); 
} 

int unknown(int x) 
{ 
    int result, y = 2; 

    if (x >= 6) 
    return 1; 
    else 
    { 
     result = unknown(x + 2) * y; 
     return result; 
    } 
} 
+2

一度に1歩ずつ歩きます。 –

+6

このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –

+0

@eggo、または、デバッガがあなたの揚げた脳の恐ろしい見通しのように見える場合(ちょっと、私たちはすべてそこにいました)、いくつかの印刷文を追加し、印刷されるものを考えます。 –

答えて

1

プログラムの実行、次の未知の(1)が呼び出された後とおり

不明(1):結果=不明(1 + 2)* 2 =不明(3)* 2

不明(3):結果=不明(3 + 2)* 2 =不明(5)* 2

不明(5):結果=不明(5 + 2)* 2 =不明

不明(7):返信1

ので、その結果を用いて、未知の(X)を交換下から上へ行けば

不明(7)= 1

不明(5)=不明(7)* 2 = 1 * 2 = 2

不明(3)=不明(5)* 2 = 2×2 = 4

不明(1)=不明(3)* 2 = 4×2 = 8

機能返す8.

+0

これはそれを説明するそのような良い方法でした!私は今それを完全に得ました、ありがとう! – eggo

+0

これは、あなたが私のエゴーの答えを受け入れることを意味します。 –