2017-08-22 2 views
1

どのようにreturn((count-2)+(count-1))の線がcppプログラムで動作しますか? 与えられたコードのansは-18です。コード を実行せずにansを知り、function count(n-2)count(n-1)のどちらかが最初に呼び出され、どのように決定されるのですか?togeatherに2つ以上の再帰関数が書き込まれている場合、プログラムはどのように実行されますか?

#include <iostream> 
using namespace std; 
int count(int n); 
int main() { 
    int n, m; 
    n = 4; 
    m = count(n); 
    cout << m; 
} 

int count(int n) 
{ 
    if (n<0) 
    { 
     return n; 
    } 
    else 
    { 
     return (count(n - 2) + count(n - 1)); 
    } 
} 
+2

関数呼び出しの結果については、評価の順序は関係ありません。 –

+0

@ manni66この場合はありませんが、メソッド呼び出しごとに変化し、戻り値に影響を与えるグローバル状態があった場合はどうなりますか? –

+1

@DavidEtler他の質問です。一般的には:それをしないでください。 –

答えて

5

+演算子の左側と右側の間にはsequencingはありません。最初に評価されるものは不明です(そしてコンパイラに残されています)。

これを理解する唯一の方法は、デバッガで1行ずつ、文ごとに、式ごとに1行ずつコードを記述することです。

しかし、各再帰呼び出しは副作用に依存しないため、相互に独立して実行することができるため、結果は常に同じになるため、順序は関係ありません。

+3

その呼び出しが再帰的であるかどうかはここでは関係ありません。 – Slava

+0

答えをコンパイルせずに知る方法は? –

+1

@ SamihanJawalkarプログラムと同じ方法です。あなたは 'count(4)'が 'count(2)+ count(3)'であることを知っているので、 'count(2)'と 'count(3)'が何であるか把握し、それらを一緒に追加します。 – molbdnilo

関連する問題