跳楼梯--递归--动态规划--过渡
来源:JK老班
题目:n阶楼梯,每次跳1 或 3 或 4阶,问有几种跳法?
1.递归:
#include<iostream>
using namespace std;
int count=0;//调用次数
int F(int i){
count++;
if(i==0) return 1;
int sum=0;
if(i>=1) sum+=F(i-1);
if(i>=3) sum+=F(i-3);
if(i>=4) sum+=F(i-4);
return sum;
}int main(){
int n=20;
cout<<F(n)<<endl;
cout<<"count="<<count;
}
大量重复计算。
可以将算过的返回加起来,避免重复计算。
2.递归优化:
#include<iostream>
using namespace std;
int count=0;//调用次数
int A[100]={0};int F(int i){
count++;
if(A[i]!=0) return A[i];
if(i==0) return 1;
int sum=0;
if(i>=1) sum+=F(i-1);
if(i>=3) sum+=F(i-3);
if(i>=4) sum+=F(i-4);
A[i]=sum;
return sum;
}int main(){
int n=20;
cout<<F(n)<<endl;
cout<<"count="<<count;
}
查看实际计算次数:
#include<iostream>
using namespace std;
int count=0;
int A[100]={0};int F(int i){
if(A[i]!=0) return A[i];
if(i==0) return 1;
count++;
int sum=0;
if(i>=1) sum+=F(i-1);
if(i>=3) sum+=F(i-3);
if(i>=4) sum+=F(i-4);
A[i]=sum;
return sum;
}int main(){
int n=20;
cout<<F(n)<<endl;
cout<<"count="<<count;
}
楼梯阶数多时,递归调用次数还是很多的。
3.动态规划:
#include<iostream>
using namespace std;
int count=0;
int A[100]={0};int main(){
int n=40; A[0]=1;
for(int i=1;i<=n;i++){
A[i]=A[i-1];
if(i>=3) A[i]+=A[i-3];
if(i>=4) A[i]+=A[i-4];
}
cout<<A[n];
}
跳楼梯--递归--动态规划--过渡相关推荐
- C语言:跳楼梯问题(斐波那契数列)(vs)(递归)
一,问题: 小只因跳楼梯: 众所周知美国校队只因一次可以跳上1级台阶,也可以跳上2级.求该只因跳上一个n级的台阶总共有多少种跳法? 二,思路: /*从逆向想: x层的走法其实就是其前一层或前两层的走法 ...
- 剑指offer-跳楼梯和变态跳楼梯(C++)
1.普通跳楼梯 1.题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 2.解题思路 该题本质上是斐波那契数列,从第n阶台 ...
- 3-3 兔子跳楼梯 3-4 斐波那契数列(II)
3-3 兔子跳楼梯 小兔子喜欢蹦蹦跳跳上楼梯 ,它能一次跳1阶楼梯,也能一次跳上2阶楼梯.问小兔子要上一个n阶的楼梯,最多有多少种不同上楼的走法? 输入格式: 输入一行包含一个整数 n,表示有几阶楼梯 ...
- 算法—斐波拉契数列(跳楼梯问题)
问题描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 这道题一看,就会轻易的知道用递归,f(1)=1;f(2)=1;f(n)=f(n-1)+f(n-2 ...
- 剑指offer 青蛙跳楼梯
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法.(变态跳楼梯) 解题思路 1.数学归纳 因为n级台阶,第一步有n种跳法:跳1级. ...
- 买卖股票最佳时机+青蛙跳楼梯
1.买卖股票最佳时机 数组 numbers: [1,2,6,3,4] 想求的最佳买卖时机,暴力解法,可以使用for循环,循环两次,查看最大差值 较优方案:动态规划 初始化一个Min值和一个Max值,m ...
- [Leetcode][第546题][JAVA][移除盒子][递归][动态规划]
[问题描述][困难] [解答思路] 1. 递归 动态规划 class Solution {public int removeBoxes(int[] boxes) {int[][][] dp = new ...
- 蓝桥杯练习 小明上楼梯(递归设计)
小白上楼梯(递归设计) 题目 思路 源代码 题目 小白正在上楼梯,楼梯有n阶台阶,小白一次可以上1阶,2阶或者3阶,实现一个方法,计算小白有多少种走完楼梯的方法. 思路 可以发现,这道题就跟求斐波那契 ...
- 跳楼梯(洛谷P1255题题解,Java语言描述)
题目要求 题目链接 分析 一个经典问题,跳楼梯问题,考察最最最简单的DP. 从当前阶梯看,可以向上跳1格或是2格(前提是受到顶部约束):倒过来看,从起点到达当前阶梯的可能路径数是从起点到当前阶梯-1和 ...
最新文章
- c++ resizereserve
- Android自动化测试框架
- spring中那些让你爱不释手的代码技巧
- zookeeperclient设置监听
- VS2005的Command Window 调试命令的总结(转载)
- nyoj--86--找球号(一)(hashset二分)
- oracle sh文件怎么打开,Oracle数据库逻辑备份的SH文件
- iOS使用新浪微博、微信官方SDK分享内容
- pip/pip3 install 报错 “Could not find a version that satisfies the requriement xxx” 的解决方法
- postman 配置统一的ip地址
- 电子计算机印前技术定义,印前技术入门教程 -电脑资料
- 终于搞定电子专利网上申请了
- R语言使用dplyr包计算dataframe分组聚合样本独特值个数、计数个数、四分位距IQR
- 好用的识别植物的软件app合集分享,快码住了
- Java各种运算符号的含义及区别汇总
- Java基础案例:查找水仙花数(for循环)详解
- TB5 AXD 在win7 vista下 启动失败
- HTML-背景和图片
- 【React-Native】集成微信官方安卓端SDK,实现微信登录、发送/分享小程序消息等功能
- 雪山温泉海螺沟(一) 成都
热门文章
- Java jbcl.jar下载
- CDZ8100 Linux32 系统,UbuntuLinux的操作系统基本.ppt
- 引领腕上健康潮流:华米科技再推时尚智能手表新品
- U盘安装ubuntu20.04 Linux系统分区方案 Invalid Partition Table
- KDYD-JC自动高压漆膜连续性试验仪
- Python爬虫HTTP异常:rllib.error.HTTPError: HTTP Error 418,伪装User-Agent以及fake-useragent插件的妙用
- 李开复解密微软成功之道 盖茨鲍尔默好搭档(zz)
- 带你打造一套 APM 监控系统 之 卡顿监控
- 史上最全 69 道 Spring 面试题和答案
- Cadence PSpice 模型10:ABM库的控制源型模型介绍与使用方法图文演示