zoukankan      html  css  js  c++  java
  • 【Java SE】斐波那契数列

    首先是最简单的方式

     1 public class Fabonacci {
     2     //1 1 2 3 5 8...
     3         static int i = 0;
     4     static int j = 0;
     5     static int f(){
     6         if(j==0){
     7             j = 1;
     8             return 1;
     9         }
    10         int r = i + j;
    11         i = j;
    12         j = r;
    13         return r;
    14     }
    15     public static void main(String[] args) {
    16         for (int i = 0; i < 18; i++) {
    17             System.out.print(f()+" ");
    18         }
    19     }
    20 }            

    输出如下:

    1 1 2 3 5 8 13 21 34 55 

    然后是使用递归

    package com.knowind;
    
    public class Fabonacci {
        //1 1 2 3 5 8...
        int count = 0;
        Integer next(){
            return g(count);
        }
        int g(int count){
            this.count++; //
            if(count < 2){
                return 1;
            }
            //0>1 1>1 2>2 3>3 4>5 5>8
            return g(count-1)+g(count-2);//前一次的次数加上前前一次的次数
        }
        public static void main(String[] args) {
            Fabonacci f = new Fabonacci();
            for (int i = 0; i < 10; i++) {
                System.out.print(f.next()+" ");
            }
        }
    }

    输出:

    1 1 2 8 10946 Exception in thread "main" java.lang.StackOverflowError
        at com.knowind.Fabonacci.g(Fabonacci.java:15)
        at com.knowind.Fabonacci.g(Fabonacci.java:15)

    来看看为什么会出现这样的情况。事实上,拿 this.count = 8 来举例,刚进来 g( int count )方法, this.count 便 this.count++ 变成了 this.count = 9,随后 ,在 return 的时候,又调用 g( count-1 ) 即 g( 8 )!这不就是陷入了死循环吗?

    那么怎么修正呢?

    public class Fabonacci {
        //1 1 2 3 5 8...
        int count = 0;
        Integer next(){
            return g(count++);
        }
        int g(int count){
    //        this.count++; 
            if(count < 2){
                return 1;
            }
            //0>1 1>1 2>2 3>3 4>5 5>8
            return g(count-1)+g(count-2);//前一次的次数加上前前一次的次数
        }
        public static void main(String[] args) {
            Fabonacci f = new Fabonacci();
            for (int i = 0; i < 10; i++) {
                System.out.print(f.next()+" ");
            }
        }
    }

    题外话:g( count++) 先为方法形参赋值再对 count+1,这一点和 g( ++count ) 情形相反。

    输出如下:

    1 1 2 3 5 8 13 21 34 55 

  • 相关阅读:
    MySQL Cluster --01
    TPCC-MySQL(转自imysql.com)
    MySQL mha 高可用集群搭建
    Redis--初入
    Python之Fabric
    MySQL pt-table-checksum及pt-table-sync校验及修复主从一致性
    MySQL GTID
    MySQL Batched Key Access
    MySQL Block Nested-Loop Join(BNL)
    MySQL Index Condition Pushdown
  • 原文地址:https://www.cnblogs.com/Tsing-Evan/p/8446002.html
Copyright © 2011-2022 走看看