小明爬楼梯
#include <iostream>
#include <iomanip>
using namespace std;
/*可愛的小明特別喜歡爬樓梯,他有的時候一次爬一個臺階,
有的時候一次爬兩個臺階,有的時候一次爬三個臺階。
如果這個樓梯有36個臺階,小明一共有多少種爬法呢?*///n層臺階,走一步剩下n-1層臺階,有n-1層臺階它自己那么多種走法,即有f(n-1)種走法
//n層臺階,走兩步剩下n-2層臺階,有n-2層臺階它自己那么多種走法,即有f(n-2)種走法
//n層臺階,走兩步剩下n-3層臺階,有n-3層臺階它自己那么多種走法,即有f(n-3)種走法
//遞歸,第一步有三種走法,第二步進入第一層遞歸,然后又是第一步,。。。剩下有對應自己的走法 //循環版本double Fibonacci(int n)
{double y = 0.0, f1 = 1.0, f2 = 2.0, f3 = 4.0;if (n > 0){switch (n){case 1:y = f1;break;case 2:y = f2;break;case 3:y = f3;break;default:for (int i = 4; i <= n; ++i){y = f1 + f2 + f3;f1 = f2;f2 = f3;f3 = y;}}}return y;
}/*
//遞歸版本(壞方法),也可以用動態規劃存起來,但還是沒有循環快
double Fibonacci(int n)
{double y;if (n > 0){if (1 == n){y = 1;//一個臺階只有一種走法}else if (2 == n){y = 2;//兩個臺階有2種走法,1、1;2 }else if (3 == n){y = 4;//三個臺階有4種走法,1、1、1;1,2;2,1;3 }else{y = Fibonacci(n - 1) + Fibonacci(n - 2) + Fibonacci(n - 3);}return y;}
}*/int main()
{int n;double y;cin >> n;y = Fibonacci(n);cout << setprecision(20) << y << endl;return 0;
}========================================Talk is cheap, show me the code=======================================
轉載于:https://www.cnblogs.com/lcy0515/p/9179827.html
總結
- 上一篇: c++ 头文件和库
- 下一篇: 写给20年后的自己:免费的午餐最贵