100-27

27.跳台阶问题(递归)
题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。
求总共有多少总跳法,并分析算法的时间复杂度。
这道题最近经常出现,包括MicroStrategy等比较重视算法的公司

都曾先后选用过个这道题作为面试题或者笔试题。

思路:这道题,也是老题了。主要的思路是这样的。考虑在第n个台阶。如果想要到达第n个台阶,只有两种可能,要么从第n-1层台阶跳1级上来,要么从第n-2级台阶跳2级上来。所以,f(n)=f(n-1)+f(n-2);现在我们考虑f(1)=1,f(2)=2;这时,就会发现,这道题目与斐波那契数列比较像。只是初始条件不同罢了。

贴上代码:

/*===================================================*\
第19题(数组、递归):
题目:定义Fibonacci数列如下:  
/ 0 n=0
f(n)= 1 n=1
/ f(n-1)+f(n-2) n>=2
输入n,用最快的方法求该数列的第n项。
分析:在很多C语言教科书中讲到递归函数的时候,都会用Fibonacci作为例子。
因此很多程序员对这道题的递归解法非常熟悉,但....呵呵,你知道的。。
\*===================================================*/
#include <iostream>

using namespace std;

int fibonacci(int n){
	int first = 1;
	int second = 2;
	int ret = 0;
	if(1 == n){
		return first;
	}
	if(2 == n){
		return second;
	}
	int i = 3;
	while(i++ <= n){
		ret = first + second;
		first = second;
		second = ret;
	}
	return ret;
}

int main(){
	int n = 0;
	cin >> n;
	int ret = fibonacci(n);
	cout << "n = " << n << ": " << ret << endl;
	return 1;
}

你可能感兴趣的:(100-27)