首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

这段递归的返回值为什么会是这样?该怎么解决

2012-03-14 
这段递归的返回值为什么会是这样???#includestdio.hinta[3]{1983,6,5},b[3]{1983,5,8}intttintmax_a

这段递归的返回值为什么会是这样???
#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 处,也就是说没有返回,
在外部函数接收它的返回值时,会得到随机性值.

热点排行