Search code examples
javarecursionmemorymemory-efficient

PellNumbers via recursion. Failed attempt to implement memorizing vector


I tried to make more efficient PellNumbers method via recursion and HashMaps but the return is bad. It is off by Pn-1 (PellNumber of n-1 row).

I mean for 7 the return should be 169 but it is 239 (off by 70 which is P6).

Is there a way to make this thing work? After few calculations, I want to store values so I can access them later.

public class 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);       
}

Solution

  • You are not initializing your Map correctly. Pell numbers start with 0 (0, 1, 2, 5, 12, 29, 70, 169 ...)

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