【问题标题】:Fibonacci linear time recursion斐波那契线性时间递归
【发布时间】:2014-12-28 23:56:34
【问题描述】:

为什么这只能在 n=90 左右有效? 试图计算第 94 个斐波那契数会给出不正确的结果。 如果我使用 Integer 类而不是 Long,也会发生同样的情况。

import java.util.HashMap;

public class FDP {

    private static HashMap<Long, Long> fib = new HashMap<Long, Long>();

    private static Long calculateFib(Long n) {

        if(fib.get(n)==null){
            Long temp = calculateFib(n-1) + calculateFib(n-2);
            fib.put(n, temp);
            return temp;
        }
        else{
            return fib.get(n);
        }
    }
    }

    public static void main(String[] args) {
        fib.put(0L, 0L);
        fib.put(1L, 1L);
        System.out.println(calculateFib(90L)); //success
        System.out.println(calculateFib(94L)); //garbage??
    }
}

这里是斐波那契数列:

http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibtable.html

【问题讨论】:

    标签: recursion dynamic-programming fibonacci


    【解决方案1】:

    这是一个溢出。 第 94 个斐波那契数是:19740274219868223167 Long.MAX_VALUE 是: 9223372036854775807

    19740274219868223167 - 9223372036854775807 &gt; 0

    您可以使用BigInteger 处理任意长度的数字。

    【讨论】:

      【解决方案2】:

      你达到Long(64位)类型的限制,改用BigInteger

      【讨论】:

        猜你喜欢
        • 2010-12-03
        • 2014-04-02
        • 1970-01-01
        • 2017-11-18
        • 2014-01-08
        • 2011-12-14
        • 2012-11-29
        • 2018-04-10
        相关资源
        最近更新 更多