鱼C论坛

 找回密码
 立即注册
查看: 2063|回复: 7

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

[复制链接]
发表于 2014-4-3 19:43:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-4 21:05:17 | 显示全部楼层
因为你三个循环已经把所有的情况都考虑到了,最后一行是永远都执行不了的,所以可有可无。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-4 21:36:14 From FishC Mobile | 显示全部楼层
代码没试,不过你自己调试一下应该就知道原因
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-4 23:22:56 | 显示全部楼层
...应该是3个判断吧。。。三个判断必定执行一个return,所以最后的return z估计很难会被执行。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;大概就是这个原因。


以上纯属个人见解,大神勿喷,不过有错的话,欢迎各位大神指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-5 08:48:18 From FishC Mobile | 显示全部楼层
清明 发表于 2014-4-4 23:22
...应该是3个判断吧。。。三个判断必定执行一个return,所以最后的return z估计很难会被执行。。。

return z  肯定会被执行的, 不然程序是得不到结果的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-6 21:58:21 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-8 19:22:19 | 显示全部楼层
有点明白了,好像return 1这个语句相当于是返回函数的结果的意思!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 03:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表