题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少种跳法,并分析算法的时间复杂度。答:用一个函数f(n)来表示n级台阶总的跳法。1、只有1个台阶,则f(1) = 1;2、有2个台阶,则f(2) = 2;3、当有n个台阶时,如果第一次跳1级,有f(n-1)种跳法,如果第一次跳2级,有f(n - 2)种跳法,即f(n) = f(n-1) + f(n-2)。即为Fibonacci序列。复制代码 代码如下:#include "stdafx.h"#include <iostream>using namespace std;//循环int TotalStep(int n){ if (n <= 0) { return 0; } else if (1 == n || 2 == n) { return n; } int first = 1; int second = 2; int total = 0; for (int i = 3; i <= n; i++) { total = first + second; first = second; second = total; } return total;}//递归int RecurTotalStep(int n){ if (n <= 0) { return 0; } else if (n == 1 || n == 2) { return n; } else { return RecurTotalStep(n - 1) + RecurTotalStep(n - 2); }}int _tmain(int argc, _TCHAR* argv[]){ cout<<TotalStep(20)<<endl; cout<<RecurTotalStep(20)<<endl; return 0;}运行界面如下:
精彩评论