import java.util.*;
publicclass Main{
publicstaticintf(int n){
if(n==1||n==2){
return1%10007;
}else{
return (f(n-1)+f(n-2))%10007;
}
}
publicstaticvoidmain(String []args){
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
System.out.println(Main.f(a));
}
}
结果却给了我这样的回复:运行超时。想了想,递归的耗时性很大,于是改变方法体:
算法一:
import java.util.Scanner;
publicclass Main {
publicstaticvoidmain(String[] args) {
int[] a = newint[10000001];
a[1] = 1;
a[2] = 1;
int n = new Scanner(System.in).nextInt();
for (int i=3; i<=n; i++){
a[i] = (a[i-1]+a[i-2])%10007;
}
System.out.println(a[n]);
}
}
算法二:
import java.util.Scanner;
publicclass Main {
publicstaticvoidmain(String[] args) {
int f1 = 1;
int f2 = 1;
int n = new Scanner(System.in).nextInt();
for (int i=3; i<=n; i++){
int t = f2;
f2 = (f1 + f2) % 10007;
f1 = t;
}
System.out.println(f2);
}
}