1、递归
时间复杂度 O(2^n)
空间复杂度 O(n)
int Fibon1(int n)
{
if (n == 1 || n == 2)
{
return 1;
}
else
{
return Fibon1(n - 1) + Fibon1(n - 2);
}
}
2、非递归
时间复杂度:O(n)
空间复杂度:O(1)
int Fabio(int n) //循环
{
int i;
int f1 = 1;
int f2 = 1;
int f3 = 1;
for(i = 2;i<n;i++)
{
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
return f3;
}
3、当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
public static void main(String args[]){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int F[] = new int[n+2];
F[1]=1;
F[2]=1;
if(n>2){
for(int i=3;i<=n;i++){
F[i]=(F[i-1]+F[i-2])%10007;//用来保存余数
}
}
System.out.println(F[n]);
}
这个题如果n=789461123164533243,就是错误的,用BigInteger我试了试,还是不行,求大佬解答。