2017-08-22 50 views
1

return((count-2)+(count-1))如何在cpp程序下工作? ans給定的代碼是-18。如何知道ans而不運行代碼 和兩個function count(n-2)count(n-1)哪一個先被調用,它是如何決定的?當有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。所以首先評估哪一個是未知的(並且由編譯器決定)。

想出來的唯一方法是逐步思考他在調試器中逐行,按語句聲明,按表達式表達式的表達式。

但是,由於每次遞歸調用都不依賴於任何副作用,因此它們可以彼此獨立執行,因此順序無關緊要,因爲結果總是相同的。

+3

你可能想補充說,如果這個調用是遞歸的或不在這裏沒有關係。 – Slava

+0

如何在不編譯它的情況下知道答案? –

+1

@SamihanJawalkar和程序一樣。你知道'count(4)'是'count(2)+ count(3)',所以你計算出count(2)和count(3)是什麼,然後把它們加在一起。 – molbdnilo

相關問題