如何使用C语言实现递归调用

递归的定义:

程序调用自身的编程技巧称为递归,就是运行时调用了自己。

什么样的问题适合使用递归方式:

如果一个大问题可以拆分成几个小问题,其中有n个小问题和原来的大问题本质一样,只是难度小一些。这种问题可以考虑采用递归的方式解决。


递归函数的编码原则:

1、编写语句把问题的拆分方式描述出来。

2、在函数的开头写一个分支语句处理不可拆分的情况(这个分支必须可以让函数结束)


下面讲解几个例子了解什么是递归。


例一:古典问题——有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第三年每个月的兔子总数为多少?(提示:兔子的规律为数列1,1,2,3,5,8,13,21....)

PS:如果生的都是公兔子或者母兔子就不用算了,不知道大家有没有想过,想到过的请举手!

月份12345678910
小兔子101123581321
大兔子0112358132134
总数11235813213455

通过表格分析,可以看出:

F(n) = F(n-1) + F(n-2);

#include
    
    
     
     
int fei(int num){
    if(num <= 2){
        return;
    }
    return fei(num - 1) + fei(num - 2);
}
int main(){
    int num1 = 0;
    printf("请输入第三年的月份:\n");
    scanf("%d",&num1);
    printf("第三年第%d个月生%d只兔子",num1,fei(36 + num1));
    return 0;
}
    
    


例二:趣味问题——年龄。有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

#include
    
    
     
     
int age(int num){
    if(num == 1){
        return 10;
    }
    return age(num - 1) + 2;
}
int main(){
    printf("第5个人的年龄是%d\n",age(5));
    return 0;
}
    
    


例三:趣味问题——猴子吃桃。海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

#include
   
   
    
    
int peach(int num){
    if(num == 1){
        return 6;
    }
     return ((peach(num - 1) + 1) * 5);   
}
int main(){
    printf("总共有桃子数为:%d\n",peach(5));
    return 0;
}
   
   

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值