标签:
第一种:用递归法(时间复杂度是n的指数级别)
#include<iostream> int fun(int x) { if(x==1||x==2) return 1; return (fun(x-1)%10007 + fun(x-2)%10007); } int main() { int n; std::cin>>n; std::cout<<fun(n); return 0; }
第二种:用数组(时间复杂度为O(n),空间复杂度为O(n))
#include<iostream> int fun(int x) { int *arr = new int[x+1]; arr[0]=1; arr[1]=1; for(int i=2;i<=x;i++) arr[i] = arr[i-1]%10007 + arr[i-2]%10007; int result = arr[x-1]%10007; delete [] arr; return result; } int main() { int n; std::cin>>n; std::cout<<fun(n); return 0; }
第三种:和第二种一样(空间复杂度为O(1),时间复杂度为O(n))
#include<iostream> int fun(int x) { int pre=1; int post=1; int result=0; if(x==1||x==2) return 1; for(int i=2;i<x;i++) { result = pre%10007 + post%10007; post = pre%10007; pre = result%10007; } return result%10007; } int main() { int n; std::cin>>n; std::cout<<fun(n); return 0; }
从下到上是运行情况。
标签:
原文地址:http://www.cnblogs.com/fudianheg/p/4385678.html