Java 为什么这个记忆化的斐波那契程序返回0?
我试图创建一个记忆斐波那契程序来开始学习动态规划。然而,当我运行这个程序时,它总是返回0Java 为什么这个记忆化的斐波那契程序返回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
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
。