2017-02-20 63 views
1

我是新來的c + +,我試圖做一個計算器。我設計了這個功能得到了一些階乘的目的:EXC_BAD_ACCESS在簡單的c + + XCODE程序

 int factorial(int num1) { 
    int sum; 
    if (num1 == 1) { 
     sum = 1; 
    } 
    else { 
     sum = factorial((num1 - 1) * num1); 
    } 

    return sum; 
} 

每當我試着編譯這一點,但是,我上

int factorial(int num1) 

任何想法發生了什麼錯誤EXC_BAD_ACCESS?我正在使用XCODE。

+0

我懷疑編譯器崩潰,而我認爲它是你的程序崩潰,當你試圖運行它。但除非我們有[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve),否則我們不能說太多。請編輯您的問題以包含該問題,最重要的是您如何*調用函數(而不是聲明它)。如果您閱讀輸入內容,那麼還包括您提供的實際輸入內容。或者嘗試通過在調試器中運行你的程序來解決它。 –

+2

但是,如果您通過例如'2'到函數中,你將有*無限遞歸*。您可以使用調試器來找出原因。 –

回答

1

只要num1不是1,您的定義就會導致無限遞歸。

自己做一下數學計算:

factorial(2) 
= factorial((2-1) * 2) 
= factorial(2) 
= factorial((2-1) * 2) 
= ... 

factorial(3) 
= factorial((3-1) * 3) 
= factorial(6) 
= factorial((6-1) * 6) 
= factorial(30) 
= ... 

階乘函數的遞歸定義是不

factorial(n) = factorial((n - 1) * n) 

factorial(n) = n * factorial(n - 1) 

(而階乘不是一個總和,而是一個產品。)