| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 739 人关注过本帖, 1 人收藏
标题:求教递归使用
只看楼主 加入收藏
星火gavin
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:78
专家分:170
注 册:2011-11-5
结帖率:90.48%
收藏(1)
已结贴  问题点数:20 回复次数:10 
求教递归使用
递归到底是怎样使用的呀,当调用自己时又是怎样用的,还有就是有返回值时,怎样返回是直接返回调用的数吗?
2011-11-26 09:57
hxcet
Rank: 4
等 级:业余侠客
帖 子:78
专家分:229
注 册:2011-11-15
收藏
得分:3 
给你一个最简单的求阶乘的实例看看,或许能有帮助
#include<stdio.h>
int JieCheng(int n)
{
    if(n==0||n==1)
        return 1;
    else
        return (n*JieCheng(n-1));  //这里就是递归
}
void main()
{
    int a;
    printf("请输入一个整数: ");
    scanf("%d",&a);
    if(a<0)
        printf("出错!\n");
    else
        printf("%d!=%d\n",a,JieCheng(a));
}
2011-11-26 10:40
lj19920629
Rank: 1
等 级:等待验证会员
帖 子:5
专家分:0
注 册:2011-11-3
收藏
得分:0 
嗯,楼上正解,返回值是最后结果,每一步保存时用栈保存数据、
2011-11-26 15:00
keaixiaou
Rank: 2
等 级:论坛游民
帖 子:9
专家分:21
注 册:2011-11-23
收藏
得分:0 
就是函数里面嵌套着函数呗~
2011-11-26 15:00
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:3 
借用下楼上某位的函数来说明

程序代码:
int fun(int n)
{
    if(n==0||n==1)
        return 1;
    else
        return (n*fun(n-1));  
}

假如调用的时候,是fun(4),那么
此时  调用fun(4),n=4,还是不满足条件,则得到fun(4)  为4*fun(3),
此时再调用fun(3),n=3,还是不满足条件,则得到fun(3)  为3*fun(2)
此时再调用fun(2),n=2,还是不满足条件,则得到fun(2)  为2*fun(1)
最后n=1,fun(1),符合if条件,即fun(1)返回一个1,这个1就会回到之前的2*fun(1)得到fun(2)为2
然后这个2再回到3*fun(2),得到fun(3)为6,这个6再回到4*fun(3)里面,得到fun(4)为24。最后得到的24就是函数最后返回的值。
2011-11-26 15:26
mfh
Rank: 6Rank: 6
等 级:侠之大者
帖 子:179
专家分:411
注 册:2009-5-31
收藏
得分:0 
写的太好了。
2011-11-26 16:28
cqm9266
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
帖 子:174
专家分:186
注 册:2011-10-28
收藏
得分:0 
路过学习

没病的人说有病的人有病,有病的人说没病的人有病。到底是谁有病?
2011-11-26 20:40
战斗!立
Rank: 2
等 级:论坛游民
帖 子:29
专家分:43
注 册:2011-11-26
收藏
得分:5 
给你几个比较经典的例子
递归调用

#include<stdio.h>

void main()
{
    int w = 2;
    void fun(int);
    fun(w);
    printf("\n");
}

void fun(int k)
{
    if(k>0)
        fun(k-1);
    printf("%d\t",k);
}
 
输出的结果是0  1  2

第n个人说他比第n-1个人大2岁;第n-1个人说他比第n-2个人大2岁;……第2个人说他比第2个人大2岁;第一个说他10岁,问第n个人多大
#include<stdio.h>

void main()
{
    int n;
    printf("the number of people:");
    scanf("%d",&n);
    int age(int a);
    printf("the age of %dth people is: %d.\n",n,age(n));
}

int age(int a)
{   
    if (a==1)
        return 10;
    else
        return age(a-1) + 2;
}
求年龄的


求n的阶乘
#include<stdio.h>

int fun(int n);

void main()
{
    int n;
    printf("the number of n:");
    scanf("%d",&n);
    printf("the fun(%d) = %d.\n",n,fun(n));
}
int fun(int n)
{
    if(n == 1)
        return 1;   
    while(n != 1)
        return n*fun(n-1);
}


M到n的和递归
#include<stdio.h>

int sum(int a,int b);

void main()
{
    int m,n;
    printf("input two numbers m and n:");
    scanf("%d%d",&m,&n);
    if (m > n)
        printf("%d.\n",sum(m,n));
    else
        printf("input error.\n");
}
int sum(int a,int b)
{
    if(a == b)
        return a;
    else
        return b+sum(a,b+1);
}

斐波那契数列
#include<stdio.h>

int fi(int a);

void main()
{
    int n;
    printf("the number of ouput:");
    scanf("%d",&n);
    printf("F[%d] = %d.\n",n,fi(n));
}

int fi(int a)
{
    if(a == 1||a == 2)
        return 1;
    else
        return fi(a-1)+fi(a-2);
}
2011-11-26 21:06
战斗!立
Rank: 2
等 级:论坛游民
帖 子:29
专家分:43
注 册:2011-11-26
收藏
得分:3 
一切都遵循这个
图片附件: 游客没有浏览图片的权限,请 登录注册
2011-11-26 21:08
id3663423
Rank: 2
来 自:浙江
等 级:论坛游民
帖 子:48
专家分:63
注 册:2009-4-15
收藏
得分:3 
跟你这么说把...从前有座山,山上有个老和尚和一个小和尚,他们在干什么呢,他们在讲故事,他们在讲什么呢,他们在讲从前有座山,山上有个老和尚和一个小和尚,他们在干什么呢,他们在讲故事,他们在讲什么呢,他们在讲从前有座山,山上有个老和尚和一个小和尚,他们在干什么呢,他们在讲故事,他们在讲什么呢,他们在讲从前有座山,山上有个老和尚和一个小和尚,他们在干什么呢,他们在讲故事,他们在讲什么呢,他们在讲.....c语言中最后故事需要结局,不然就死了...这样理解了吧

每多学一点知识,就少写一行代码.
2011-11-26 21:11
快速回复:求教递归使用
数据加载中...
 
   



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

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