关于一段递归程序
#include <bits/stdc++.h>using namespace std;
int arr;
int Find(int x)
{
if(x==-1)return x;
arr=Find(arr);
}
int main()
{
arr=3;
arr=2;
arr=1;
arr=-1;
cout<<Find(3)<<endl;
}
这题递归过程是怎么样的呢?x非0时不是没有返回值吗?为什么Find(3)还有返回值3呢?
Find(3):
arr=Find(2):
arr=Find(1):
return 1;
这样arr=1,然后递归不就断开了吗? 系统没有提出警告吗?我的返回 0。我想这是编译器的问题了。照理来说应该返回 -1
我想您的编译器偷偷帮你加了 return x
if(x == -1) return x;
arr ...
return x 当“不是所有的控件路径都返回值”(不是每一次执行函数都返回值)时,编译器会在最后面复制最近的一个return。 这个问题VC编译器只做警告:(实际是个错误)“warning: control reaches end of non-void function [-Wreturn-type]
”,当非void返回值的函数在函数最后没有return,编译器会自动将离函数底部最近的return当作本函数的最后return,本例即相当于在最后添加 return x;这样会导致程序有时正确,有时是错误的。 无符号整形 发表于 2018-8-16 08:11
当“不是所有的控件路径都返回值”(不是每一次执行函数都返回值)时,编译器会在最后面复制最近的一个retu ...
最近的return应该是1才对,为什么是3呢?
最后的结果是:arr=1,arr=1 御笔剑客 发表于 2018-8-16 09:47
最近的return应该是1才对,为什么是3呢?
最后的结果是:arr=1,arr=1
一个个返回(-1->1->2->3) 会上树的猪 发表于 2018-8-16 08:35
这个问题VC编译器只做警告:(实际是个错误)“warning: control reaches end of non-void function [-Wret ...
warning: control reaches end of non-void function [-Wreturn-type]
这句的意思是相当于函数没有返回值,所以为了完整性,我想编译器帮楼主添加了
就好比楼主的代码没有 return 0,但又是 int main(),所以编译器自行添加了。这是我测试到的推测。
页:
[1]