Java 为什么这种记忆化斐波那契的实现不起作用?
然后它就起作用了。怎么会?是否Java 为什么这种记忆化斐波那契的实现不起作用?,java,dictionary,hashmap,fibonacci,Java,Dictionary,Hashmap,Fibonacci,然后它就起作用了。怎么会?是否put()返回放入映射的值?否,它不返回。您可以在中阅读,其中明确指出,put返回与键关联的previous值,或者null(如果键没有映射) V put(K键,V值) 将指定值与此映射中的指定键关联(可选操作)。如果映射以前包含键的映射,则旧值将替换为指定值。(称映射m包含密钥k的映射,当且仅当m.containsKey(k)返回true。) 参数: 键-与指定值关联的键 value—与指定键关联的值 返回: 与键关联的上一个值,如果键没有映射,则为null。(如
put()
返回放入映射的值?否,它不返回。您可以在中阅读,其中明确指出,put
返回与键关联的previous值,或者null
(如果键没有映射)
V put(K键,V值)
将指定值与此映射中的指定键关联(可选操作)。如果映射以前包含键的映射,则旧值将替换为指定值。(称映射m包含密钥k的映射,当且仅当m.containsKey(k)返回true。)
参数:键-与指定值关联的键
value—与指定键关联的值 返回: 与键关联的上一个值,如果键没有映射,则为null。(如果实现支持null值,则null返回还可以指示先前与key关联的映射为null。) 因此,对于您的代码,必须使用以下内容:
memo.put(n, fibo);
return fibo;
返回给定键的上一个值,而不是您现在分配给它的值。在您的例子中,当您第一次遇到每个键时,您调用
put
,因此它将返回null
否。它不返回已放置的值:,它返回“与键关联的上一个值,如果键没有映射,则返回null”。请参阅put将返回上一个值而不是新值。如果使用Java 8,您可以使用Map
的.computeIfAbsent()
与您的问题无关,但将[0,n)
范围内的所有整数作为键的Map更被称为数组/列表。
memo.put(n, fibo);
return fibo;
memo.put(n, fibo); // will NOT return the value
return fibo; // and here it is returned