读书人

函数递归的返回值解决方法

发布时间: 2013-10-21 17:02:52 作者: rapoo

函数递归的返回值

int fun(int a)
{
cout<<a<<endl;
if(a == 0)
{
cout<<"ok!"<<endl;
return 10;
}
else if ( a > 0)
{
fun2(a-1);//没有返回值
}
else
{
fun2(a+1);
}
}

执行下面的代码:
cout<<fun(2)<<endl;
结果是:
2
1
0
ok
10//这里为什么能够返回10?在fun2(a-1)处并没有return 递归
[解决办法]
else if ( a > 0)
{
fun2(a-1);//没有返回值
}
else
{
fun2(a+1);
}

这个地方是调用fun2函数,并且把a+1作为参数。递归函数,这里应该是fun(a+1)而不是fun2(a+1)吧?
总之你的函数思路就是小于0,让a一步一步加一,大于0,让a一步一步减一。最终a变成0,得到10这个返回值,再一步一步替代回去。最终把fun(2)中的fun(a-1)替换为10,把10作为fun(2)的返回值,输出。
[解决办法]
如果我要设计编译器话,直接给你个"并不是所有代码路径都有返回值 "的错误.
也许是由于递归调用的特殊性,编译器做了特殊的处理.
[解决办法]
引用:
如果我要设计编译器话,直接给你个"并不是所有代码路径都有返回值 "的错误.
也许是由于递归调用的特殊性,编译器做了特殊的处理.

诶,记得C#里一直都算错误的,但C/C++从未算错误,最多就是个警告...
C/C++,只要求有1个返回值就可以了,如果其他的没写都返回0
[解决办法]
没有返回值

2
1
0
ok!
2293556
请按任意键继续. . .


所以你看到的 10 只是一个巧合

读书人网 >C++

热点推荐