问题一、走台阶问题(递归和动态规划)
2015-09-05 09:40
639 查看
【本期题目】
1、斐波那契系列问题的递归和动态规划
【题目】
给定整数N,返回斐波那契数列的第N项。
【补充题目1】
给定整数N,代表台阶数,一次可以跨2个或者1个台阶,返回有多少种走法。
【举例】
N=3。可以三次都跨1个台阶;也可以先跨2个台阶,再跨1个台阶;还可以先跨1个台阶,再跨2个台阶。所以有三种走法,返回3。
【补充题目2】
假设农场中成熟的母牛每年只会生1头小母牛,并且永远不会死。第一年农场有1只成熟的母牛,从第二年开始,母牛将开始生小母牛。每只小母牛3年之后成熟又可以开始生小母牛。给定整数N,求出N年后牛的数量。
【举例】
N=6。第1年1头成熟母牛记为a。第2年a生了新的小母牛记为b,总牛数为2。第3年a生了新的小母牛记为c,总牛数为3。第4年a生了新的小母牛记为d,总牛数为4。第5年b成熟了,a和b分别生了新的小母牛,总牛数为6。第6年c也成熟了,a、b和c分别生了新的小母牛,总牛数为9。返回9。
解答:
当前程序仅针对上述【补充题目1】解答。
未尽事宜及下一步工作:①斐波那契系列问题未进行编程,补充题目2未进行解答;②补充题目1中,退出机制的调试。③程序N值较大时,运算耗时,想办法提高算法速度。
1、斐波那契系列问题的递归和动态规划
【题目】
给定整数N,返回斐波那契数列的第N项。
【补充题目1】
给定整数N,代表台阶数,一次可以跨2个或者1个台阶,返回有多少种走法。
【举例】
N=3。可以三次都跨1个台阶;也可以先跨2个台阶,再跨1个台阶;还可以先跨1个台阶,再跨2个台阶。所以有三种走法,返回3。
【补充题目2】
假设农场中成熟的母牛每年只会生1头小母牛,并且永远不会死。第一年农场有1只成熟的母牛,从第二年开始,母牛将开始生小母牛。每只小母牛3年之后成熟又可以开始生小母牛。给定整数N,求出N年后牛的数量。
【举例】
N=6。第1年1头成熟母牛记为a。第2年a生了新的小母牛记为b,总牛数为2。第3年a生了新的小母牛记为c,总牛数为3。第4年a生了新的小母牛记为d,总牛数为4。第5年b成熟了,a和b分别生了新的小母牛,总牛数为6。第6年c也成熟了,a、b和c分别生了新的小母牛,总牛数为9。返回9。
解答:
当前程序仅针对上述【补充题目1】解答。
未尽事宜及下一步工作:①斐波那契系列问题未进行编程,补充题目2未进行解答;②补充题目1中,退出机制的调试。③程序N值较大时,运算耗时,想办法提高算法速度。
#include<iostream> using namespace std; int N=0; int count=0; int Means(const int &N) { int M=N; if(M<1) return count; if(M==1) count+=1; else if(M==2) count+=2; else { Means(M-1); Means(M-2); } return count; } //bool exitN(const int &N) //退出机制没有处理好 //{ // char keyone=NULL; // if(N=='B') // { // cout<<"确定要退出吗?确定(y),否则(n)"; // cin>>keyone; // if(keyone=='y') // return false; // } // return true; //} int main() { do { N=0;count=0; cout<<"输入整数N,N="; cin>>N; cout<<Means(N)<<endl; }while(1); }
方法二: int Means(const int &n) { if(n<1) return 0; if(n==1) return 1; if(n==2) return 2; else { return Means(n-1)+Means(n-2);//上n个台阶的方法数等于上n-1个台阶和n-2个台阶方法数之和, //即f(n)=f(n-1)+f(n-2),n>2,f(1)=1,f(2)=2}}int main(){while(1){int N=0;cin>>N;cout<<Means(N);}}
相关文章推荐
- iPhone手机常用的系统文件路径
- ubuntu 修改或创建交换分区的大小
- 常用正在表达式集锦
- 腾讯网页重构笔试总结
- android开发中如何获得应用的数字签名
- Tomcat根目录下work文件夹的作用
- 参数类表中的out ref
- 大数据之sqoop
- 【uva 11021】Tribbles
- 列表样式切换
- error: file 'boot/grub/i386-pc/normal.mod' not found
- Coursera机器学习课程笔记(3) Logistic Regression
- delphi 线程实战用法
- 噪声振动模拟仿真ESI VA One 2015.0
- js制作带有遮罩弹出层实现登录注册表单特效代码分享
- Java中的定时调度
- Linux设置固定IP
- ARC的应用
- ANDROID开发之SQLite详解
- LeetCode || Lowest Common Ancestor of a Binary Search Tree