如何使用C语言实现递归调用
来源:互联网 发布:港澳游怎么样知乎 编辑:程序博客网 时间:2024/06/06 04:43
递归的定义:
程序调用自身的编程技巧称为递归,就是运行时调用了自己。
什么样的问题适合使用递归方式:
如果一个大问题可以拆分成几个小问题,其中有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);
#includeint 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岁。请问第五个人多大?
#includeint age(int num){ if(num == 1){ return 10; } return age(num - 1) + 2;}int main(){ printf("第5个人的年龄是%d\n",age(5)); return 0;}
例三:趣味问题——猴子吃桃。海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
#includeint peach(int num){ if(num == 1){ return 6; } return ((peach(num - 1) + 1) * 5); }int main(){ printf("总共有桃子数为:%d\n",peach(5)); return 0;}
阅读全文
0 0
- 如何使用C语言实现递归调用
- C语言实现:函数的递归调用
- C语言-函数实现模块化设计-函数的递归调用
- 【C语言】递归实现。
- C语言实现-递归
- c语言之递归调用
- 【C语言】c语言中的递归调用
- 用纯C语言实现快速排序,分递归调用法和非递归调用法。
- 使用递归方法实现数字反转 C语言实现
- 使用c语言指针和递归方法实现二分查找
- 汉诺塔递归的c语言实现(递归)
- C语言实现递归算法
- android j使用JNI实现ava语言调用C语言
- 如何使用C语言实现冒泡排序
- C语言的递归调用(33)
- C语言函数的递归和调用
- C语言函数的递归调用
- C语言函数的递归调用
- R:读入csv格式数据
- C#学习初探
- Java8接口变化-静态方法&默认方法
- 拓扑排序
- CentOS7安装mono
- 如何使用C语言实现递归调用
- Windows服务安装异常:System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志。不可 访问的日志: Security
- 关于学习NDK基础知识这些就够了(六)
- psql命令
- 写QT程序遇到的一些麻烦的解决方法
- 数字三角形II
- 实验吧ctf-web题:简单的sql注入
- 兔子与星空&&丛林中的路
- 合唱团-网易python