c语言爬楼梯不用递归,递归算法之-爬楼梯

一、爬楼梯算法递归实现:假设一个楼梯有N阶台阶,人每次最多跨M阶,求总共的爬楼梯的方案数

例如:1-100的台阶,每个台阶随机权重,每次只能走一个或者两个台阶,找出从1-100最短路径

递归法:

private static int calculateCount(int ladder, int maxJump) {

int jump = 0;

if (ladder == 0) {

return 1;//ladder=0,进入到最底层,记做一种走法

}

if (ladder >= maxJump) { // 剩下的楼梯大于最大可跳跃数

for (int i = 1; i <= maxJump; i++) {

jump += calculateCount(ladder - i, maxJump);

}

}

else {

// 剩下的楼梯不足最大可跳跃数

jump = calculateCount(ladder, ladder);

} return jump; }

二、非递归实现(动态规划):(局限就是只能是1或2步)

当楼梯数为1、2、3、4、5时,对应的爬法有:1、2、3、5、8、13、21种。

可以发现,随着楼梯数n的增加,爬法总数呈现斐波那契数列规律增加,即f(n) = f(n-1) + f(n-2)

知道这个规律后,使用下面的循环即可实现:

public int count(int n){

if(n==1 || n==2){

return n;

}

int a = 1;

int b = 2;

int total;

for(int i=3;i<=n;i++){

int temp = b;

b = a + b;

a = temp;

}

return b;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值