可能重复:
我想生成序列 1,3,8,22,60 ,164 的第 n 项,以 Order(1) 或 (nlogn)
的顺序计算序列 1,3,8,22 的第 n 项, 60,164,448,1224……?
我有一个递归关系 f(n) = 2 * (f(n-1) + f(n-2))。我必须求解 f(k) mod 1000000007,其中 k 是输入。k 的范围是 1 <= k <= 1000000000?。我尝试通过简单的递归函数来实现它,但显然它会导致大 k 溢出,因此我遇到了运行时错误。我是算法和东西的新手,所以需要知道是否存在解决此类问题的具体有效方法?
#include<stdio.h>
#define M 1000000007
long long unsigned res(long long unsigned n){
if(n==1)
return 1;
else {
if(n==2)
return 3;
else return (2*(res(n-1)%M+res(n-2)%M));
}
}
int main(){
int test;
scanf("%d",&test);
while(test--){
long long unsigned n;
scanf("%llu",&n);
printf("%llu\n",res(n));
}
getch();
return 0;
}