laishiba 发表于 2015-9-9 21:14:16

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

#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
哪位大神给帮忙看下

仰望天上的光 发表于 2015-9-9 21:14:17

return n * test(--n);这句中,如果先对n进行--并导致n的值减一,再对n*中的n求值,就会导致错误。(而这两者的顺序,C语言标准没有规定先后,所以这样变成在不同编译器上有可能得到不同的结果)

牡丹花下死做鬼 发表于 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);
        }
}

Gordonzf 发表于 2015-9-10 14:35:20

学习一下~

laishiba 发表于 2015-9-11 09:18:06

牡丹花下死做鬼 发表于 2015-9-9 21:37


我的代码写的不规范?谢谢您的指正

laishiba 发表于 2015-9-11 09:18:52

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

谢谢您 学习了:handshake

442860990 发表于 2015-9-25 19:03:57

领鱼币

y290176346 发表于 2015-10-8 21:49:43

感谢楼主谢谢你 学习了
页: [1]
查看完整版本: 一个简单的递归问题,哪位大神帮忙看下,谢谢谢谢