这段递归的返回值为什么会是这样?该怎么解决
这段递归的返回值为什么会是这样???
#include <stdio.h>
int a[3]={1983,6,5},b[3]={1983,5,8};
int tt;
int max_age(int);
int main()
{
printf( "%f\n ",max_age(0));
getchar();
}
int max_age(int i)
{
if (a[i] <b[i])
return 1;
else if (a[i]==b[i])
{
if (i <3)
max_age(++i);
else
return 0;
}
else
return 0;
}
返回值应该不是1就是0,可在我的devc++是16384。
但这段代码在turbo c++3.0中运行正常,返回0
同时我发现,只要改变max_age的返回类型为float,或者改变printf的输出类型为float,就返回的是0
请高手指点,谢谢!
------解决方案--------------------
devcpp没给你warning?
if (i <3)
max_age(++i);
这儿少了return分支。
------解决方案--------------------
你换vc2005编译就会看到告警了
warning C4715: 'max_age ' : not all control paths return a value
没有明确的return语句,就天知道return了啥。
------解决方案--------------------
这个程序dev没给任何出错或警告信息;
另外,这里为什么需要return分支?
是说结束本次调用吗?
可是不用这样也行啊,运行到下面的else return 0;也能结束本次调用。请指教?
if (i <3)
max_age(++i);
else
return 0;
----------------------------
你看看你的执行流程,max_age(++i)执行结束后,没有任何显示的执行到return 处,也就是说没有返回,
在外部函数接收它的返回值时,会得到随机性值.
#include <stdio.h>
int a[3]={1983,6,5},b[3]={1983,5,8};
int tt;
int max_age(int);
int main()
{
printf( "%f\n ",max_age(0));
getchar();
}
int max_age(int i)
{
if (a[i] <b[i])
return 1;
else if (a[i]==b[i])
{
if (i <3)
max_age(++i);
else
return 0;
}
else
return 0;
}
返回值应该不是1就是0,可在我的devc++是16384。
但这段代码在turbo c++3.0中运行正常,返回0
同时我发现,只要改变max_age的返回类型为float,或者改变printf的输出类型为float,就返回的是0
请高手指点,谢谢!
------解决方案--------------------
devcpp没给你warning?
if (i <3)
max_age(++i);
这儿少了return分支。
------解决方案--------------------
你换vc2005编译就会看到告警了
warning C4715: 'max_age ' : not all control paths return a value
没有明确的return语句,就天知道return了啥。
------解决方案--------------------
这个程序dev没给任何出错或警告信息;
另外,这里为什么需要return分支?
是说结束本次调用吗?
可是不用这样也行啊,运行到下面的else return 0;也能结束本次调用。请指教?
if (i <3)
max_age(++i);
else
return 0;
----------------------------
你看看你的执行流程,max_age(++i)执行结束后,没有任何显示的执行到return 处,也就是说没有返回,
在外部函数接收它的返回值时,会得到随机性值.