经典算法题--斐波那契数列

输出斐波那契数列中第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 ++;
        }
    }
}

 

posted @ 2020-03-28 21:42  大西young  阅读(657)  评论(0编辑  收藏  举报