1. 程式人生 > >入門訓練 Fibonacci數列 (陣列越界問題)

入門訓練 Fibonacci數列 (陣列越界問題)

我的想法:建立一個數組直接表示Fn除以10007的餘數,所以a[1]=1; a[2]=1; a[n]就是所求餘數。

我的程式碼:

import java.util.Scanner;

public class Main {
	public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int a[] = new int[n+1];
		a[1]=1;
		a[2]=1;
		for(int i=3;i<=n;i++)
		{
			a[i] = (a[i-1]+a[i-2]) % 10007;
		}
		System.out.println(a[n]);
	}
}

顯示結果是

我百思不得其解,最後發現是在輸入n=1時報錯陣列越界

所以改變陣列下標,重新執行

import java.util.Scanner;

public class Main {
	public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int a[] = new int[n+1];
		a[0]=1;
		a[1]=1;
		for(int i=2;i<n;i++)
		{
			a[i] = (a[i-1]+a[i-2]) % 10007;
		}
		System.out.println(a[n-1]);
	}
}

顯示100,正確。

以後在運用到陣列時,一定要考慮到陣列越界問題,看是不是滿足所有的定義域都有解。