我试图通过递归和HashMaps来提高PellNumbers方法的效率,但是返回效果很差。由Pn-1(n-1行的PellNumber)关闭。

我的意思是说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);
}

最佳答案

您没有正确初始化Map。编号以0(0、1、2、5、12、29、70、169 ...)开头

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

09-11 17:51