#include <iostream> using namespace std; int Fibonacci(int n) { /*斐波拉契数列问题-递归*/ //if(n==0)return 0; //if(n==1)return 1; //else return ( Fibonacci(n-1) + Fibonacci(n-2) ); /*斐波拉契数列问题-循坏*/ int result=1; int pre_result=0; if(n==0) {result=0;} if(n==1) {result=1;} while(n>1){ int temp=result; result += pre_result; pre_result = temp; n--; } return result; } int jumpFloor(int number) { /*跳台阶问题-递归*/ //if(number<0)return 0; //if(number==0)return 1; //if(number==1)return 1; //else return (jumpFloor(number-1) + jumpFloor(number-2)); /*跳台阶问题-循坏*/ int way=1; int pre_way=1; if(number<0)way=0; if(number==0)way=1; if(number==1)way=1; while(number>=2){ int temp=way; way += pre_way; pre_way = temp; number--; } return way; } int jumpFloorII(int number) { /*变态跳台阶问题-递归*/ //if(number<0)return 0; //if(number==0 || number==1)return 1; //int ways=0; //while(number > 0){ //number--; //ways += jumpFloorII(number); //} /*变态跳台阶问题-(数学分析)*/ if(number<0)return 0; if(number==0 || number==1)return 1; return 1<<(number-1); } int rectCover(int number) { /*格子填充问题*/ if(number==0)return 0; else if(number==1)return 1; else if(number==2)return 2; /*递归*/ // else return rectCover(number-1) + rectCover(number-2); /*循环*/ else{ int ways = 2; int pre_ways=1; while(number-->2){ int temp=ways; ways += pre_ways; // f(n)=f(n-1)+f(n-m), m is the rows pre_ways = temp; } return ways; } } int main() { cout << Fibonacci(5)<<endl; cout << jumpFloor(3)<< endl; cout << jumpFloorII(4)<<endl; cout << rectCover(4)<<endl; return 0; }