关于函数返回值的一点疑问!求解答!
#include<stdio.h>int factorial(int x);
void main()
{
int a,y;
a=4;
y=factorial(a);
printf("%d\n",y);
}
int factorial(int x)
{
int z;
if(x>=2)
{
z=factorial(x-1)*x;
}
else if(x<0)
{
printf("error\n");
}
else
{
return 1;
}
return z;
}
以上代码实现的是计算a的阶乘!我在运行的过程中发现一个问题!就是我去掉最下面的 return z; 这个语句!发现程序也能正确运行!请问是为什么
因为你三个循环已经把所有的情况都考虑到了,最后一行是永远都执行不了的,所以可有可无。 代码没试,不过你自己调试一下应该就知道原因 ...应该是3个判断吧。。。三个判断必定执行一个return,所以最后的return z估计很难会被执行。。。 本帖最后由 FXW 于 2014-4-5 00:55 编辑
我认为是你在第一次运行时用了return z,此时factorial()函数的返回值默认为先前的值24(a=4),但你去掉了return z 后,默认返回值就是之前的24,你可以这样试一下:先 写 return 3 运行;然后去掉return 3,运行,你会发现,返回结果还是3 ,就是 如果没有return 默认返回之前执行的结果
总结:如果函数不要返回值,最好用void类型 即 void fun();如果有返回值就必须有一个return;因为int factorial()所以必须返回一个值,但你没写,编译器也没报错,所以就应该是之前的值。
你应该发现很多函数后面都要return 0;大概就是这个原因。
以上纯属个人见解,大神勿喷,不过有错的话,欢迎各位大神指点
清明 发表于 2014-4-4 23:22
...应该是3个判断吧。。。三个判断必定执行一个return,所以最后的return z估计很难会被执行。。。
return z肯定会被执行的, 不然程序是得不到结果的! 啃啃 发表于 2014-4-5 08:48 static/image/common/back.gif
return z肯定会被执行的, 不然程序是得不到结果的!
哦哦哦,自己的这个毛病就是不好,呵呵,代码没仔细看。。。 有点明白了,好像return 1这个语句相当于是返回函数的结果的意思!
页:
[1]