[英]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.