最直接暴力的方式就是递归求解,但是消耗的时间太大,计算机的工作量大,但是代码简洁。
实例代码如下:
public class Fib {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();System.out.println(fib(n)%10007);}static int fib(int n) {if(n==1||n==2) return 1;return fib(n-1)+fib(n-2);}}
第一种方法是直接求出第n项后再求余数,显然消耗的时间太大,在竞赛中会导致时间超出而使答案不完全正确。因此,我们可以灵活变通一下,直接求出第n项的余数
第二种方法是利用数组来求解:
实例代码如下:
public class Fib {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.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项:
public class Fib {public static int main(String[] args) {Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int a = 1, b = 1, result = 0;if(n==1 || n==2) return 1;else { for(int i = 3; i <= n; i++){ result = (a+b)%10007; a = b; b = result ; }return result;} }}