美文网首页Java
Java - 斐波那契数列(常规算法、递归算法)

Java - 斐波那契数列(常规算法、递归算法)

作者: 533e11a308d9 | 来源:发表于2018-01-05 11:16 被阅读104次

      斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

    package com.code.ggsddu;  
    
    import java.util.Scanner;  
    
    public class FibonacciSeries {  
        public static void main(String[] args) {  
            System.out.print("请输入数列长度:");  
            Scanner scanner = new Scanner(System.in);  
            int index = scanner.nextInt();  
    
            System.out.println("常规思路:");  
            System.out.print("数列前" + index + "项:");  
            byConventional(index);  
    
            System.out.println();  
    
            System.out.println("递归算法:");  
            System.out.println("数列第" + index + "项:" + byRecursion(index));  
            System.out.println("数列前" + index + "项:");  
            for (int n = 1; n <= index; n++) {  
                System.out.print(byRecursion(n) + "\t");  
                if (n % 5 == 0) {  
                    System.out.println();  
                }  
            }  
        }  
    
        /** 
         * 常规算法 
         * 打印斐波那契数列前n项
         * 
         * @param n 总项数、数列总长度
         */  
        public static void byConventional(int n) {  
            // 后一项等于前面两项之和  
            int previous = 1;  
            int middle = 1;  
            int next = 0;  
            for (int i = 1; i <= n; i++) {  
                if (i == 1 || i == 2) {  
                    System.out.print(1 + " ");  
                } else {  
                    next = previous + middle;  
                    previous = middle;  
                    middle = next;  
                    System.out.print(next + " ");  
                }  
            }  
            System.out.println();  
        }  
    
        /** 
         * 递归算法  
         * 获取斐波那契数列第n项 
         *
         * @param n 数组下标 
         * @return 
         */  
        public static int byRecursion(int n) {  
            if (n == 1 || n == 2) {  
                return 1;  
            }  
            return byRecursion(n - 1) + byRecursion(n - 2);  
        }  
    }  
    

     
    控制台:

    请输入数列长度:10  
    常规思路:  
    数列前10项:1 1 2 3 5 8 13 21 34 55   
    
    递归算法:  
    数列第10项:55  
    数列前10项:  
    1   1   2   3   5     
    8   13  21  34  55    
    
    Process finished with exit code 0  
    

    相关文章

      网友评论

        本文标题:Java - 斐波那契数列(常规算法、递归算法)

        本文链接:https://www.haomeiwen.com/subject/skbjnxtx.html