import java.util.Scanner;
public class Fibonacci {
static long Fn(long n)
{
if(n==1||n==2)
return 1;
else
return Fn(n-1)+Fn(n-2);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//把问题分解一下,先求出第n个菲波那切数
// 1 1 2 3 5 8……
// f1 f2 f3 f4 f5 f6……
//输入n
//要用递归
Scanner in=new Scanner(System.in);
long n=in.nextInt();
//System.out.println(n);
long fn=Fn(n);
//System.out.println(fn);
System.out.println(fn%10007);
}
}
然而报错了,显示运行超时。。。
或许因为我用了递归吧。
在另一篇博客看到C语言不用递归的方法,改成java后,运行通过。
import java.util.Scanner;
public class Fibonacci2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int M=10007;
int a1,a2;
a1=a2=1;
int temp;
long n;
long i;
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
for( i=1;i<n;i++)
{
temp=a2;
a2=(a1+a2)%M;
a1=temp;
}
System.out.println(a1);
}
}