热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用HashMap.computeIfAbsent计算Fibonacci序列时,计算无法完成

如何解决《使用HashMap.computeIfAbsent计算Fibonacci序列时,计算无法完成》经验,谁能帮忙解答一下?

我正在尝试使用computeIfAbsent()类中的函数在Fibonacci序列中获得第1到第20个项HashMap.这是代码:

@Test
public void getFibMap() {
    Map map = new HashMap<>();
    map.put(1, 1L);
    map.put(2, 1L);
    fib(20, map);
    map.forEach((x, y) -> System.out.printf("key : %d --> value : %d\n", x, 
        y.));
}

public Long fib(Integer n, Map map) {
    return map.computeIfAbsent(n, v -> fib(n - 1, map) + fib(n - 2, map));
}

但是当程序结束时,两个数字19和20都会丢失,这些数字应该被计算出来.这是控制台:

key : 1 --> value : 1
key : 2 --> value : 1
key : 3 --> value : 2
key : 4 --> value : 3
key : 5 --> value : 5
key : 6 --> value : 8
key : 7 --> value : 13
key : 8 --> value : 21
key : 9 --> value : 34
key : 10 --> value : 55
key : 11 --> value : 89
key : 12 --> value : 144
key : 13 --> value : 233
key : 14 --> value : 377
key : 15 --> value : 610
key : 16 --> value : 987
key : 17 --> value : 1597
key : 18 --> value : 2584        //finished here

Process finished with exit code 0

当我为其构造函数指定地图的显式大小时,将计算这两个数字.我不知道为什么:

@Test
public void getFibMap() {
    Map map = new HashMap<>(25);
    map.put(1, 1L);
    map.put(2, 1L);
    fib(20, map);
    map.forEach((x, y) -> System.out.printf("key : %d --> value : %d\n", x, 
        y));
}

public Long fib(Integer n, Map map) {
    return map.computeIfAbsent(n, v -> fib(n - 1, map) + fib(n - 2, map));
}

安慰:

...
key : 12 --> value : 144
key : 13 --> value : 233
key : 14 --> value : 377
key : 15 --> value : 610
key : 16 --> value : 987
key : 17 --> value : 1597
key : 18 --> value : 2584
key : 19 --> value : 4181
key : 20 --> value : 6765        //finished here

Process finished with exit code 0

拜托,有人能告诉我为什么会这样吗?


推荐阅读
author-avatar
道士也调情
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有