**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答复。
此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
3天前关闭。
Improve this question
我犯了一个错误,当我做了一个递归函数,其目的是获得一个最大的斐波那契值在Integer32在c++。
我犯的错误是
int get_largest_in_fibonacci(int before, int current){
if(current < 0){
return before;
}else{
get_largest_in_fibonacci(current, before + current);
// should have been
// return get_largest_in_fibonacci(current, before + current);
}
}
我没有在else语句中返回。
但在这个问题上我不想知道。
int main(){
cout << "result : " << get_largest_in_fibonacci(1,1) << '\n';
return 0;
}
在这个main()中,结果是result : 2
。但我不明白2从何而来。
因为,那个行为不好的函数不能返回值。
一开始,我以为参数(1,1)
可以在某个地方得到2。
所以我改变了它们的值,比如(3,5),但结果是一样的。
然后我想这可能是一个垃圾值。
但我认为垃圾值几乎总是给我随机的“大”数字,但在这里不是这样的。
我把main()
稍微修改了一下。
int main(){
int result = get_largest_in_fibonacci(1,1);
cout << "result : " << result << '\n';
return 0;
}
将函数结果赋给int result
。
但在这一次,结果是result : 0
。
所以我想知道get_largest_in_fibonacci
最初是如何返回的,以及如何通过将其分配给int变量来改变返回值?
1条答案
按热度按时间mf98qq941#
你的假设是错误的。一个不返回void类型的函数,如果在执行路径中失败为
return
,则如果该路径在运行时采用,则会表现出未定义的行为。在这一点上,所有的赌注都关闭了。该程序可能会崩溃,返回2
或其他任何东西或删除您的主文件夹。默认情况下,gcc发出一个警告,应该注意,因为所有警告都应该:
警告:控件到达非void函数的结尾[-Wreturn-type]