问题描述
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
输入格式
输入包含一个整数n。
输出格式
输出一行,包含一个整数,表示Fn除以10007的余数。
最初
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int f ;
f=fa(n);
System.out.println(f%10007);
}
public static int fa(int x) {
if(x==0) return 0;
if(x==1) return 1;
return fa(x-1)+fa(x-2);
}
}
结果超时,因为何时取余不会影响最终结果,所以即时取余防止溢出?
采用循环方法可以解决超时问题;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int f=1,t1=1,t2=1;
for(int i=3;i<=n;i++) {
f=(t1+t2)%10007;
t1=t2;
t2=f;
}
System.out.println(f);
}
}
循环求解斐波那契列函数
int f=1,t1=1,t2=1;
for(int i=3;i<=n;i++) {
f=(t1+t2);
t1=t2;
t2=f;
}