[英]why does this recursion program work?
#include <iostream>
using namespace std;
int main() {
int n,x;
int fact(int);
cin >> n;
x = fact(n);
cout << x;
return 0;
}
int fact(int n) {
if(n!=1)
return n*fact(n-1);
}
在最后一種情況下,當傳遞給函數fact的參數為1時,如何在我無需在代碼中指定的情況下計算出fact(1)
等於1的情況?
該程序依賴於未定義的行為。 當然不能保證它能正常工作,但是您可能會發現這樣一種情況,您發送的參數(1)處於調用代碼將其視為返回值的位置。 不要依賴此行為。
許多C ++編譯器會因為存在語義問題而拒絕此代碼: 並非所有控制路徑都從fact()返回值
int fact(int n);
此函數簽名返回一個整數,但是當給定n = 1時,您的實現中沒有相應的return語句。 在那種情況下,該函數可能返回任何int
值(即內存中的垃圾),並且該行為是undefined 。 即使編譯器允許運行它,也不應依賴於此。
我很確定您在編譯程序時看到了警告。 在我的環境中(在Mac OSX上為g ++),編譯器發出以下警告:
警告:控制可能會達到非無效功能的結束[-Wreturn-type]
就個人而言,我認為編譯器沒有充分的理由允許這種錯誤(即,它應該無法編譯)。
參考:以下是類似的問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.