asdasddd 发表于 2014-4-3 19:43:14

关于函数返回值的一点疑问!求解答!

#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; 这个语句!发现程序也能正确运行!请问是为什么

谭斌谭斌 发表于 2014-4-4 21:05:17

因为你三个循环已经把所有的情况都考虑到了,最后一行是永远都执行不了的,所以可有可无。

啃啃 发表于 2014-4-4 21:36:14

代码没试,不过你自己调试一下应该就知道原因

清明 发表于 2014-4-4 23:22:56

...应该是3个判断吧。。。三个判断必定执行一个return,所以最后的return z估计很难会被执行。。。

FXW 发表于 2014-4-5 00:51:53

本帖最后由 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-5 08:48:18

清明 发表于 2014-4-4 23:22
...应该是3个判断吧。。。三个判断必定执行一个return,所以最后的return z估计很难会被执行。。。

return z肯定会被执行的, 不然程序是得不到结果的!

清明 发表于 2014-4-6 21:58:21

啃啃 发表于 2014-4-5 08:48 static/image/common/back.gif
return z肯定会被执行的, 不然程序是得不到结果的!

哦哦哦,自己的这个毛病就是不好,呵呵,代码没仔细看。。。

asdasddd 发表于 2014-4-8 19:22:19

有点明白了,好像return 1这个语句相当于是返回函数的结果的意思!
页: [1]
查看完整版本: 关于函数返回值的一点疑问!求解答!