| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2472 人关注过本帖
标题:关于递归阶乘问题 答案老是0,求大神指点
只看楼主 加入收藏
hc407647719
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-4-21
结帖率:57.14%
收藏
已结贴  问题点数:10 回复次数:12 
关于递归阶乘问题 答案老是0,求大神指点
//运用递归计算出n以内所以数的阶乘之和
# include <stdio.h>
int f(int n);
int sum(double n);

int main (void)
{
    double n;

    printf("Please input you want 阶乘 number: ");
    scanf("%lf", &n);


    printf("sum = %lf\n", sum(n));

    return 0;
}

//n的阶乘
int f(double n)
{
    if(n == 0 || n==1)
    {
        return 1;
    }
    else
    {
        return n*f(n-1);        //运用递归的原理,不断调用自身
    }
}

//遍历n以内的每个数,把每个数的阶乘相加
int sum(double n)
{
    double i;
    double sum;
    for(i=1; i<=n; i++)
        sum += f(i);
    return sum;
}

[此贴子已经被作者于2016-4-20 11:54编辑过]

2016-04-20 11:52
zhulei1978
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
收藏
得分:5 
//遍历n以内的每个数,把每个数的阶乘相加
int sum(double n)
 {
     double i;
     double sum;
     for(i=1; i<=n; i++)
         sum += f(i);
     return sum;
 }

你那个sum要赋个初值

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2016-04-20 11:57
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
函数类型最好也定义成double
2016-04-20 12:02
nupt_陈小二
Rank: 2
等 级:论坛游民
帖 子:13
专家分:36
注 册:2016-4-17
收藏
得分:2 
你这一会int,一会double,会发生数值截断的,低位截断会返回0的。而且阶乘不都是整数之间相乘吗,都用int或者long long int(c99)类型吧,而且sum的初始化。
程序代码:
int f(int n);
int sum(int n);

int main (void)
{
    int n;

    printf("Please input you want 阶乘 number: ");
    scanf("%d", &n);


    printf("sum = %d\n", sum(n));

    return 0;
}

//n的阶乘
int f(int n)
{
    if(n == 0 || n==1)
    {
        return 1;
    }
    else
    {
        return n*f(n-1);        //运用递归的原理,不断调用自身
    }
}

//遍历n以内的每个数,把每个数的阶乘相加
int sum(int n)
{
    int i;
    int sum=0.0;
    for(i=1; i<=n; i++)
        sum += f(i);
    return sum;
}
2016-04-20 12:15
hc407647719
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-4-21
收藏
得分:0 
回复 2楼 zhulei1978
谢谢,现在可以有结果了,我吧函数类型也改了,但是不明白为什么要把sum赋初值才可以呢
2016-04-20 12:17
hc407647719
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-4-21
收藏
得分:0 
回复 4楼 nupt_陈小二
为什么一定要sum赋初值呢
2016-04-20 12:21
zhulei1978
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
收藏
得分:2 
以下是引用hc407647719在2016-4-20 12:17:05的发言:

谢谢,现在可以有结果了,我吧函数类型也改了,但是不明白为什么要把sum赋初值才可以呢


sum要赋初值0才能有正确的结果,不让刚定义出来的时候它是一个随机值

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2016-04-20 13:47
hc407647719
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-4-21
收藏
得分:0 
回复 3楼 grmmylbs
换成了double但是后面太多0了,我想换成long long int好像提示是 非法的,怎么整
2016-04-20 13:52
hc407647719
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-4-21
收藏
得分:0 
回复 7楼 zhulei1978
将才实验了一下,好像没有赋初值也不会有问题的啊,这个是怎么回事呢
# include <stdio.h>

int main (void)
{
    int i;
    int j = 5, k = 3;
    i = j +k;

    printf("%d\n", i);

    return 0;
}

/*
--------------
输出结果:
        8
--------------
*/
2016-04-20 13:57
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:1 
这样写就不会有很多小数了
程序代码:
# include <stdio.h>
double f( int n);
double sum(int n);

int main(void)
{
    int n;

    printf("Please input you want 阶乘 number: ");
    scanf("%d", &n);


    printf("sum = %.0lf\n", sum(n));

    return 0;
}

//n的阶乘
double f(int n)
{
    if (n == 0 || n == 1)
    {
        return 1;
    }
    else
    {
        return n*f(n - 1);        //运用递归的原理,不断调用自身
    }
}

//遍历n以内的每个数,把每个数的阶乘相加
double sum(int n)
{
    int i;
    double sum = 0;
    for (i = 1; i <= n; i++)
        sum += f(i);
    return sum;
}
2016-04-20 14:08
快速回复:关于递归阶乘问题 答案老是0,求大神指点
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021378 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved