n个台阶编程题php,动态规划-n个台阶的走法

bVbuUs7?w=1000&h=563

陌上人如玉

公子世无双

前言

n个台阶 一次只能走 一步或者两步,问有多少种走法

问题分析

假设有n个台阶:

当 n=0,即没有台阶时 走法为0

当 n=1,台阶为1时 走法为1

当 n=2,台阶为2时 走法为2:一步一步 , 两步

当为n个时, 相当于在n-1这个台阶走一步或者在n-2这个台阶走两步

所以n个台阶 相当于 n-1个台阶的走法加上n-2个台阶的走法

递归实现:

递归函数: dp(n) = dp(n-1) + dp(n-2)

递归出口: n=0 return 0

n=1 return 1

n=2 return 2

如果有对递归思想不是很懂的可以查看我之前发过的递归文章链接描述,相信对你有很大帮助

代码实现

/**

n个台阶 一次只能走 一步l或者两步,问有多少步解法

当 n=0,即没有台阶时 走法为0

当 n=1,台阶为1时 走法为1

当 n=2,台阶为2时 走法为:一步一步 , 两步

当为n个时, 相当于在n-1这个台阶走一步或者在n-2这个台阶走两步

所以n个台阶 相当于 n-1个台阶的走法加上n-2个台阶的走法

递归实现:

递归函数: dp(n) = dp(n-1) + dp(n-2)

递归出口: n=0 return 0、n=1 return 1、n=2 return 2

@param n 个台阶

@return n个台阶走法

*/

int dp(int n) {

if (n == 0) {

return 0;

} else if (n == 1) {

return 1;

} else if (n == 2) {

return 2;

} else {

return dp(n-1) + dp(n-2);

}

}

功能测试

int main(int argc, const char * argv[]) {

@autoreleasepool {

int sum;

sum = dp(2);

NSLog(@"2个台阶的走法:%d\n", sum);

sum = dp(3);

NSLog(@"3个台阶的走法:%d\n", sum);

sum = dp(4);

NSLog(@"4个台阶的走法:%d\n", sum);

sum = dp(9);

NSLog(@"9个台阶的走法:%d\n", sum);

}

return 0;

}

bVbuUv0?w=892&h=197

源码地址

[链接描述][4]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值