经典算法题--斐波那契数列
输出斐波那契数列中第n项的值
方法一、辗转相加
import java.util.Scanner; public class Main { public static int Fibonacci(int n){ int a = 1,b=1,c=0; if (n == 0) { return 0; } if (n <= 2) { return 1; } else { for (int i = 3; i <= n; i++) { c = a + b; b = a; a = c; } return c; } } public static void main(String[] args) { int n = 0; Scanner scanner = new Scanner(System.in); n = scanner.nextInt(); System.out.println(Fibonacci(n)); } }
前两项的值均为1,循环从第3项起,每项的值均为前两项之和。
按照这个思路,我们也可以尝试使用递归实现功能
方法二、递归
import java.util.Scanner; public class Main { public static int Fibonacci(int n){ int a = 1,b=1,c=0; if (n == 0) { return 0; } if (n <= 2) { return 1; } else { return Fibonacci(n - 1) + Fibonacci(n - 2); } } public static void main(String[] args) { int n = 0; Scanner scanner = new Scanner(System.in); n = scanner.nextInt(); System.out.println(Fibonacci(n)); } }
不使用for循环,直接令当前返回值为前两项返回值之和。
附,输出斐波那契数列前n项的值
import java.util.Scanner; public class Main { public static void main(String[] args) { int n = 0; Scanner scanner = new Scanner(System.in); n = scanner.nextInt(); int add1 = 1,add2=1,sum=0; System.out.println(add1); System.out.println(add2); int i = 3; //前两项值已定,从第三项开始循环 while (i <= n) { sum = add1 + add2; add1 = add2; add2 = sum; System.out.println(add2); i ++; } } }