| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 461 人关注过本帖
标题:C语言函数递归调用的问题
只看楼主 加入收藏
killah
Rank: 2
等 级:论坛游民
帖 子:55
专家分:11
注 册:2013-2-4
结帖率:62.5%
收藏
已结贴  问题点数:10 回复次数:9 
C语言函数递归调用的问题
求n!
程序如下:
#include<stdio.h>
void main()
{
    long int fac(int n);
    int n;
    scanf("%d",&n);
    printf("%ld",fac(n));
}
long int fac(int n)
{
    long int c;
    if(n==1)
        c=1;
    else
                c=fac(n-1)*n;
    return(c);
}

我觉得算法上面,程序也可以改成:
#include<stdio.h>
void main()
{
    long int fac(int n);
    int n;
    scanf("%d",&n);
    printf("%ld",fac(n));
}
long int fac(int n)
{
    long int c;
    if(n==1)
        c=1;
    else
    {
        c++;
        c=fac(n-1)*c;
    }
    return(c);
}

但是我自己改的程序运行结果是错误的,是不是因为C语言函数递归调用里面规定递归的这个公式只能出现与递归次数n相关的值或函数,而不能出现其他变量(比如c),因为函数的递归调用只能调用与n相关的值或函数(即只能调用与被调用函数有关的值)?

[ 本帖最后由 killah 于 2013-3-3 21:04 编辑 ]
搜索更多相关主题的帖子: long void include return C语言 
2013-03-03 21:02
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 

重剑无锋,大巧不工
2013-03-03 21:20
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 


[fly]存在即是合理[/fly]
2013-03-03 21:34
killah
Rank: 2
等 级:论坛游民
帖 子:55
专家分:11
注 册:2013-2-4
收藏
得分:0 
回复 2楼 beyondyf
我怕我理解的不对发上来问问。。。
2013-03-03 22:27
cuixinyu
Rank: 2
等 级:论坛游民
帖 子:14
专家分:22
注 册:2013-3-3
收藏
得分:0 
哥们 我真的不理解你定义c有什么用int main()
 {
     long int fac(int n);
     int n;
     scanf("%d",&n);
     printf("%ld",fac(n));
     return 0;
 }
 long int fac(int n)
 {

     if(n==1)
         return 1;
     else
         return fac(n-1)*n;

 }
这样不就行了吗?

2013-03-03 22:34
未微电子
Rank: 2
来 自:丹霞地貌
等 级:论坛游民
帖 子:47
专家分:57
注 册:2013-2-24
收藏
得分:0 
递归调用还是用函数好,定义时选择好的表达方式,正如5楼所说,定义的原则是变量越少越好,占用的内存空间越小越好。楼主好好理解,祝您成功!

失信于一人,才跌入凄凉的境界。
2013-03-03 23:00
killah
Rank: 2
等 级:论坛游民
帖 子:55
专家分:11
注 册:2013-2-4
收藏
得分:0 
回复 5楼 cuixinyu
我明白可以不用c的,就是想知道用c会出错的原因是否是因为是递归调用,只能调用函数本身以及函数涉及到的变量
2013-03-03 23:52
cuixinyu
Rank: 2
等 级:论坛游民
帖 子:14
专家分:22
注 册:2013-3-3
收藏
得分:10 
首先你的递归本身就有问题
 c=fac(n-1)*c;
再说了 递归调用是一种特殊的嵌套调用,是某个函数调用自己,而不是另外一个函数。递归调用一种解决方案,一种是逻辑思想,就像汉诺塔问题一样,递归是一种思想,只不过在程序中,就是依靠函数嵌套这个特性来实现了。
函数调用自己你的函数里面有什么变量 你就可以用什么变量
递归调用本身就挺难得
我们只能尽量去学习这种思想


2013-03-05 15:36
killah
Rank: 2
等 级:论坛游民
帖 子:55
专家分:11
注 册:2013-2-4
收藏
得分:0 
回复 8楼 cuixinyu
谢谢你的回答
2013-03-06 22:08
cuixinyu
Rank: 2
等 级:论坛游民
帖 子:14
专家分:22
注 册:2013-3-3
收藏
得分:0 
呵呵 没事 大家一块学习
2013-03-06 22:48
快速回复:C语言函数递归调用的问题
数据加载中...
 
   



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

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