斐波拉契数列-演变
来源:互联网 发布:数据库管理第三版答案 编辑:程序博客网 时间:2024/05/20 21:45
斐波拉契数列-演变
面试中碰到类似的算法题有如下:
爬楼梯,从第一层到第十层,每次允许一次性爬1-3层,则从第1层到第10 层总共有多少种方法,并将相应的所有步数列举出来。
解法: 设爬的层数为n,需要的总共的方法数归纳为方法f(n)
先归纳下方法:
n =1:f(1) = 1;
n=2; f(2) = 2; 1+1 2
n=3; f(3) = 4; 1+2 1+1+1 2+1 3
n=4; f(4) = 7;
1+1+1+1 1+1+2 1+2+1 2+1+1 1+3 3+1 2+2
依次类推
n=5;f(5) = 13; f(4)+f(3)+f(2)
n=6; f(6) = 24; f(5)+f(4)+f(3)
…..
类推得:
n>=4时
f(n)=f(n-1)+f(n-2)+f(n-3);
当 0
int fun(int nFloors){ if(nFloors == 1){ return 1; }else if(nFloors == 2){ return 2; }else if(nFloors == 3){ return 4; } return fun(nFloors-1)+fun(nFloors-2)+\ fun(nFloors-3);}
已经能得出爬到第n层所需要的总方法数,接下来要处理的是如何将相应的步数列举出来
void fun1(int nSum,vector<int> vec){ if(nSum == 0){ vector<int>::iterator ite; for(ite = vec.begin(); ite != vec.end();ite++) { //排除大于3的元素 if((*ite)> 3){ return ; } } // 输出所有的步数 for(ite = vec.begin(); ite != vec.end();ite++) { cout<<" "<<(*ite); } } for(int i =0; i < nSum;i++){ vec.push_back(i); fun1(nSum-1,vec); vec.pop_back(); }}
运行截图,274代表从第1层爬到10层,每次只允许爬1,2,3层 后所有的步骤
0 0
- 斐波拉契数列-演变
- 斐波拉契数列
- 斐波拉契数列
- 斐波拉契数列
- 斐波拉契数列
- 斐波拉契数列
- 斐波拉契数列
- 斐波拉契数列
- 斐波拉契数列
- 斐波拉契数列
- 斐波拉契数列
- 斐波拉契数列
- 斐波拉契数列
- 斐波拉契数列
- 斐波拉契数列
- Pell数列--斐波拉契数列的“进化”
- 网页中的斐波拉契数列
- 1021 斐波拉契数列
- 九个Console命令,让js调试更简单
- [LeetCode]--221. Maximal Square
- 前端web资源word格式汇总
- Android的DrawText详解
- mac下的error: 'Access denied for user 'root'@'localhost' (using password: YES)'
- 斐波拉契数列-演变
- Tomcat8.x 上下文(StandardServer)中命名上下文(NamingContext)的创建
- AndroidEditText校验 只输入数字或特定字符
- ASimpleCache的使用,不用下载jar包
- 三角形面积求法 <包含三维坐标求三角形面积 3D>
- 我的servlet学习过程(二):tomcat服务器部分
- 指针常量和常量指针的区别
- 使用ptrace向已运行进程中注入.so并执行相关函数
- 高斯消元1(解方程)