Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么这个记忆化的斐波那契程序返回0?_Java_Algorithm_Dynamic Programming - Fatal编程技术网

Java 为什么这个记忆化的斐波那契程序返回0?

Java 为什么这个记忆化的斐波那契程序返回0?,java,algorithm,dynamic-programming,Java,Algorithm,Dynamic Programming,我试图创建一个记忆斐波那契程序来开始学习动态规划。然而,当我运行这个程序时,它总是返回0 private static Map<Integer, Long> stored = new HashMap<>(); static { stored.put(0, (long) 0); stored.put(1, (long) 0); } public static long memo(int n) { if (n==0) { r

我试图创建一个记忆斐波那契程序来开始学习动态规划。然而,当我运行这个程序时,它总是返回0

private static Map<Integer, Long> stored = new HashMap<>();
static
{
    stored.put(0, (long) 0);
    stored.put(1, (long) 0);

}

public static long memo(int n)
{
    if (n==0)
    {
        return stored.get(0);
    } 
    else if (n==1)
    {
        return stored.get(1);
    }
    else if (stored.containsKey(n))
    {
        return stored.get(n);
    }
    else
    {
        long f = ( memo(n-1) + memo(n-2) );
        stored.put(n, f);
        return f;
    }

}
private static Map stored=new HashMap();
静止的
{
存储。放置(0,(长)0);
存储。放置(1,(长)0);
}
公共静态长备忘(int n)
{
如果(n==0)
{
返回已存储。获取(0);
} 
else如果(n==1)
{
返回存储。获取(1);
}
else if(存储的容器(n))
{
返回存储的。get(n);
}
其他的
{
长f=(备忘录(n-1)+备忘录(n-2));
储存。放置(n,f);
返回f;
}
}

您只插入了0,加起来0将始终是0

只需将第二个静态插入替换为:

stored.put(1, (long) 1);

让我帮你修一下

private static Map<Integer, Long> stored = new HashMap<>();
static
{
    stored.put(0, 0);
    stored.put(1, 1);
}

public static long memo(int n)
{
    if (stored.containsKey(n))
    {
        return stored.get(n);
    } else
    {
        long f = ( memo(n-1) + memo(n-2) );
        stored.put(n, f);
        return f;
    }

}
private static Map stored=new HashMap();
静止的
{
存储。放置(0,0);
储存。放置(1,1);
}
公共静态长备忘(int n)
{
if(存储的容器(n))
{
返回存储的。get(n);
}否则
{
长f=(备忘录(n-1)+备忘录(n-2));
储存。放置(n,f);
返回f;
}
}

因为您还没有调试它?另外,您可以使用
0L
而不是
(long)0