【问题标题】:Why does this Memoized Fibonacci program return 0? [closed]为什么这个 Memoized Fibonacci 程序返回 0? [关闭]
【发布时间】:2014-01-01 23:19:56
【问题描述】:

我正在尝试创建一个记忆斐波那契程序来开始学习动态编程。然而,当我运行这个程序时,它总是返回 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;
    }

}

【问题讨论】:

  • 因为你没有调试过?
  • 另外,您可以使用0L 代替(long) 0

标签: java algorithm dynamic-programming


【解决方案1】:

你只是插入0,加起来0总是0。

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

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

【讨论】:

    【解决方案2】:

    让我为你解决这个问题

    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;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多