鱼C论坛

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

一个简单的递归问题,哪位大神帮忙看下,谢谢谢谢

[复制链接]
发表于 2015-9-9 21:14:16 | 显示全部楼层 |阅读模式
5鱼币
#include <stdio.h>

int test(int n)
{
        if(n < 2)
                return 1;
        else
                return n * test(--n);
}

int main()
{
        int a = test(10);
        printf("%d\n", a);

        return 0;
}

我自己推出来的结果是10的阶乘, vc6.0运算的结果却是362880
哪位大神给帮忙看下

最佳答案

查看完整内容

return n * test(--n);这句中,如果先对n进行--并导致n的值减一,再对n*中的n求值,就会导致错误。(而这两者的顺序,C语言标准没有规定先后,所以这样变成在不同编译器上有可能得到不同的结果)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-9 21:14:17 | 显示全部楼层
return n * test(--n);这句中,如果先对n进行--并导致n的值减一,再对n*中的n求值,就会导致错误。(而这两者的顺序,C语言标准没有规定先后,所以这样变成在不同编译器上有可能得到不同的结果)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-9 21:37:30 | 显示全部楼层
#include<stdio.h>

int jc(int n);

int main()
{
        printf("%d\n",jc(10));

        return 0;
}

int jc(int n)
{
        if(2 == n)
        {
                return 2;
        }
        else
        {
                return n * jc(n-1);
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-10 14:35:20 | 显示全部楼层
学习一下~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-9-11 09:18:06 | 显示全部楼层

我的代码写的不规范?谢谢您的指正
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-9-11 09:18:52 | 显示全部楼层
仰望天上的光 发表于 2015-9-9 21:14
return n * test(--n);这句中,如果先对n进行--并导致n的值减一,再对n*中的n求值,就会导致错误。(而这两 ...

谢谢您 学习了:handshake
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-25 19:03:57 | 显示全部楼层
领鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-8 21:49:43 | 显示全部楼层
感谢楼主谢谢你 学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 11:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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