| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 386 人关注过本帖
标题:关于递归的问题
只看楼主 加入收藏
小兵打将
Rank: 1
等 级:新手上路
帖 子:47
专家分:5
注 册:2011-4-24
结帖率:70.59%
收藏
已结贴  问题点数:4 回复次数:5 
关于递归的问题
# include <stdio.h>
float f(int a)
{
    static sum=1;
    sum=sum*a;
    a=a-1;
    if(a>0)
        sum=f(a);
    if(a==0)/******我在使用递归函数时,每次如果在这个要return的地方前面加一句if,都会出错,为什么,,,,,去掉这一句就正常了,WHY********/
    return sum;
}


void  main()
{
    int a;
    float y;
    scanf("%d",&a);
    y=f(a);
    printf("%f\n",y);
}
搜索更多相关主题的帖子: include return 
2011-07-09 13:24
struct
Rank: 1
等 级:新手上路
帖 子:4
专家分:9
注 册:2011-7-9
收藏
得分:1 
加上if(a==0)这个条件语句是错误的,这样会使递归不能返回上一层,例如:开始递归(a->b->c),开始返回(a<-b<-c),如果加上if(a==0)的话在没有返回到a的时候就开始通过判断语句if强行返回数值return sum ,编译系统会报错的,出现语法冲突。 (这是我个人的观点,我不是高手说的也许不清楚,请仅以此作为参考)。
2011-07-09 14:16
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:1 
程序代码:
# include <stdio.h>
int f(int a)
{
    if(a == 1)
        return 1;
    else
        return a*f(a-1);
}


void  main()
{
    int a;
    int y;
    scanf("%d",&a);
    y=f(a);
    printf("%d\n",y);
}
你是要求n的阶乘吧  搞的这么复杂

                                         
===========深入<----------------->浅出============
2011-07-09 14:28
小兵打将
Rank: 1
等 级:新手上路
帖 子:47
专家分:5
注 册:2011-4-24
收藏
得分:0 
回复 3楼 laoyang103
是的,我是要求阶乘,,,我知道可以用你的方法做,,但是我主要是问我这个问题的原理
2011-07-10 00:50
icysky
Rank: 5Rank: 5
来 自:心灵世界
等 级:职业侠客
威 望:1
帖 子:172
专家分:399
注 册:2011-5-17
收藏
得分:1 
递归 你理解错了     
因为递归操作就是压栈的操作
所以  你的return返回值  只有当最后一次执行  但是不是返回整个函数的结果  而是往上返回到上次调用地方  就是这句sum=f(a);  然而上次调用的地方  因为a!=0  所以不会执行return    进而可以退出  最外层的调用也没有返回值  

你可以这样看下就明白了

程序代码:
float f(int a)
{
    static sum=1;
    sum=sum*a;
    a=a-1;
    if(a>0)
        sum=f(a);
    if(a==0)/******我在使用递归函数时,每次如果在这个要return的地方前面加一句if,都会出错,为什么,,,,,去掉这一句就正常了,WHY********/
    return sum;
    return sum;
}

不管怎么走、总有一个终点...
2011-07-10 07:52
小兵打将
Rank: 1
等 级:新手上路
帖 子:47
专家分:5
注 册:2011-4-24
收藏
得分:0 
回复 5楼 icysky
谢谢啦
2011-07-10 11:28
快速回复:关于递归的问题
数据加载中...
 
   



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

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