PellNumbers通过递归。尝试实现记忆向量失败

时间:2018-01-21 21:18:13

标签: java recursion memory memory-efficient

我试图通过递归和HashMaps提高PellNumbers方法的效率,但回报很糟糕。它被Pn-1关闭(PellNumber为n-1行)。

我的意思是7,返回应该是169,但它是239(关闭70,这是P6)。

有没有办法让这件事有用?经过一些计算,我想存储值,以便我以后可以访问它们。

公共类PellNumbers {

private static final Map<Long, Long> pellNumbers = new HashMap<Long, Long>();
static {
    pellNumbers.put(0L,1L);
    pellNumbers.put(1L, 1L);
}

public static long getPellNumber(long n) {

    if (pellNumbers.containsKey(n)) return pellNumbers.get(n);
    if (n<2) return n;
    pellNumbers.put(n, 2*getPellNumber(n-1) + getPellNumber(n-2));  
    return 2*getPellNumber(n-1) + getPellNumber(n-2);       
}

1 个答案:

答案 0 :(得分:0)

您没有正确初始化Map。佩尔数从0开始(0,1,2,5,12,29,70,169 ......)

static {
    pellNumbers.put(0L,0L);
    pellNumbers.put(1L, 1L);
}