(1)
题目描述:
-
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。斐波那契数列的定义如下:
-
输入:
-
输入可能包含多个测试样例,对于每个测试案例,
输入包括一个整数n(1<=n<=70)。
-
输出:
-
对应每个测试案例,
输出第n项斐波那契数列的值。
(2)这是九度上的一个题,要求时间限制1秒,整数的范围是大于0,小于70。如果是直接从n递归到0,肯定会超时。所以应该从f(0)开始计算,然后是f(1).......,最后计算出f(n);另外还有一种更为优化的方法,能够在O(lgN)的时间完成,具体方法请移步:http://zhedahht.blog.163.com/blog/static/25411174200722991933440/
代码实现:
#include <stdio.h> #include <iostream> using namespace std;
//使用这种方法会超时 long long f(int n) { if(n == 0) return 0; else if(n==1) return 1; else return f(n-1)+f(n-2); } long long f2(int n) { if(n == 0) return 0; else if(n==1) return 1; long long temp1 = 0; long long temp2 = 1; long long temp3 = 0; for(int i=2; i<=n; ++i) { temp3 = temp2; temp2 = temp2+temp1; temp1 = temp3; } return temp2; } int main() { int n; while(scanf("%d", &n)!=EOF) { cout<<f2(n)<<endl; } }