都曾先后选用过个这道题作为面试题或者笔试题。
思路:这道题,也是老题了。主要的思路是这样的。考虑在第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; }