根据给定斐波那契递归函数创建记忆算法

问题描述 投票:0回答:1

对于学校作业,我们必须创建一个记忆式斐波那契函数,该函数重用计算斐波那契的递归实现。

设计记忆功能以使其利用现有功能的好方法是什么?到目前为止,这是我的实现:

基类:

public int computeFibonacci(int position) {
    assertPosition(position);

    if (position < 2) {
        return 1;
    }
    return computeFibonacci(position - 1) + computeFibonacci(position - 2);
}

继承的类:

public int computeFibonacci(int position) {
    assertPosition(position);

    if (position < 2) {
        return 1;
    }

    if (this.memoizedList.containsKey(position)) {
        return this.memoizedList.get(position);
    }
    int result = super.computeFibonacci(position - 1) + super.computeFibonacci(position - 2);
    this.memoizedList.put(position, result);
    return result;
}
java recursion fibonacci memoization
1个回答
0
投票

您的子类版本未充分利用缓存的值。例如,如果您调用computeFibonacci(5),并且memoizedList不包含该键,则即使它们已经被缓存,您也将调用super.computeFibonacci(4)super.computeFibonacci(3)。相反,您应该致电super.computeFibonacci(5)

public int computeFibonacci(int position) {
    assertPosition(position);

    if (position < 2) {
        return 1;
    }

    if (this.memoizedList.containsKey(position)) {
        return this.memoizedList.get(position);
    } else {
        int result = super.computeFibonacci(position);
        this.memoizedList.put(position, result);
        return result;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.