package cn.dzp.flyroc.offer; import java.util.Scanner; public class FieBoNaQieDemo { /*題目描述:如今要求一輸入一個整數n,請你輸出斐波那契數列的第n項。n <= 39*/ /*例如:一、一、二、三、五、八、1三、21就是一個斐波那契數列,前兩項之和等於後一項*/ /*思路:遞歸的效率低,使用循環方式*/ //代碼實現 public static long feibonaqie(int n){ long result = 0; //定義兩數之和 long preOne = 0; //定義第一個元素 long preTwo = 1; //定義第二個元素 if (n == 0){ //若是 n = 0 return preTwo; } if (n == 1){ //若是n = 1 return preOne; } int i; for (i = 2; i <= n; i++){ //從第三個元素開始遍歷 result = preOne + preTwo; //兩數之和 preOne = preTwo; //第一個元素變爲前一次相加的第二個元素 preTwo = result; //將結果賦值給第二個元素 } int j = i - 1; System.out.println("這是菲波那切數列的第"+j+"項:"+result); return result; } public static void checkInt(int n){ if (n >= 39 || n < 0){ throw new ArithmeticException(); } } public static void main(String[] args){ System.out.print("請輸入一個小於39的數字n:"); try { Scanner sc = new Scanner(System.in); int m = sc.nextInt(); checkInt(m); feibonaqie(m); }catch (Exception e){ System.out.println("輸入的數字超過最大限制:"+e.getMessage()); } } }