基础递归算法题

本文通过两个经典案例,深入浅出地介绍了递归算法的应用。第一个案例是计算兔子繁殖的数量,第二个案例是计算球在多次反弹后的总路程及最后一次反弹的高度。通过这两个案例,读者可以更好地理解递归算法的基本原理和实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础递归算法题

以下是博主个人随笔,希望对你有或多或少帮助,如有不对,请多指教(抱拳)

算法一: 有一对兔子,从出生后第3 个月起每个月都生一对兔子,小兔子也是一样从出生后第3个月起每个月都生一对兔子,假如兔子都不死且生的兔子都是一样能生兔子,问每个月的兔子总数为多少?(假设月数规定为第十个月)

规律:第一,二月为1对兔子,第三月为有一对兔子+第三月祖宗生对兔子总共2对兔子,四月为现有2对兔子+祖宗生一对兔子总共为3对,五月为现有3对+第三月初出生的兔子生一对兔子+祖宗生一对兔子总共为5对兔子(记:五初月同时出生2对),六月为现有5对兔子+第三月初出生的生一对+第四月初月初生一对+祖宗生一对总共8对兔子(注:六月初同时出生3对),第七月为现有8对兔子+祖宗生一对+第三月初兔子生一对+四月初生一对+五月初兔子2对兔子生2对(注:七月初同时出生5对),第八月为现有13对+祖宗生一对+三月1对出生1对+四月生一对+五月2对生两对+六月3对生3对总共为21对(注:八月同时出生8对),则可见10月的兔子为多少对兔子或多少只兔子

规律:1月1对,2月1对,三月生一对为2对兔子,4月在出生后第三个月每个月都生一对兔子总共3对兔子,5月为4月对兔子+3月的对兔子总共5对兔子,依次6月为5月+4月为8对,7月为6月+5月总共13对兔子。。。

解析:
月份:1 2 3 4 5 6 7 8
同时:0 0 1 1 2 3 5 8
对数:1 1 2 3 5 8 13 21

代码:
public static void main(String[] args) {
int[] args = new int[10];//假设总共10个月
for(int i=2;i<=10;i++){
args[i] = args[i-1]+args[i-2];//第几个月的总数等于前上两个月总和
System.out.println(“第”+[i]+“个月兔子有”+args[i]+“对”);
System.out.println(“第”+[i]+“个月兔子有”+args[i]*2+“只”);
}
}

算法二:一个球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,求它在第10次落地时,共经
过多少米? 第10次反弹多高?

同样,我们来找找规律
分析问题,一、共经过多少米,二、第10反弹的高度,从这两个角度去考虑,相反这两个问题就比较简单了
规律:当球10次落地经过多米,可以得到每次落下的总高度+原高度+每次反弹的一半

代码:
public static void main(String[] args) {
int h = 100;//初始高度
int s = 0;//总高度
for(int i=1;i<=10;i++){
s = s+h+h/2;
h = h/2;//下一次反弹的高度
}
System.out.println(“第10次落地后的总高度为:” + s + “米”);
System.out.println(“第10次反弹的高度为:” + h + “米”);
}

以上为两到基础的递归题,给新手练练手,如有不足请留言,膜拜大神!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值