书上说这段代码是用动态规划优化了递归算法,但是像下面这样数组里的元素好像永远不会改变,那跟原本的递归不就没有区别了吗

我想问一下,下面这段代码最后的 output[n] = result 意义是什么,在这段代码里它好像并不会执行。书上说这段代码是用动态规划优化了递归算法,但是像下面这样数组里的元素好像永远不会改变,那跟原本的递归不就没有区别了吗。


public class test2 {
    public static int output[] = new int[1000];
    public static void main(String[] args) {
        System.out.println(method(6));
    }
    public static int method(int n){
        int result;
        result = output[n];
        if (result == 0){
            if (n == 0)
                return 0;
            else if (n == 1)
                return 1;
            else {
                return (method(n - 1) + method(n - 2));
            }
        }
        output[n] = result;
        return result;
    }
}

if (result == 0) 条件不满足的情况下就会执行。

执行了啊。。。相当于记忆化搜索,将计算过的斐波那契数保存在 output 数组里,后面再用到就不要再递归,而是直接从数组里取,所以优化了递归的次数。

output就是输出结果的数组,output[n]=result只要result不为0就会执行啊

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632