吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 784|回复: 5
收起左侧

[已解决] goland IDE工具运行结果与命令行执行不一致

[复制链接]
sbwfnhn 发表于 2023-7-6 13:36
本帖最后由 sbwfnhn 于 2023-7-6 17:11 编辑

代码如下
[Golang] 纯文本查看 复制代码
package main

import (
        "fmt"
        "time"
)

var countSum int

func main() {
        result := 0
        start := time.Now()
        for i := 1; i <= 40; i++ {
                result = fibonacci(i)
                fmt.Printf("数列第 %d 位: %d,  递归次数%d\n", i, result, countSum)
                countSum = 0
        }
        end := time.Now()
        delta := end.Sub(start)
        fmt.Printf("程序的执行时间为: %s\n", delta)
}

func fibonacci(n int) (res int) {
        if n <= 2 {
                res = 1
        } else {
                res = fibonacci(n-1) + fibonacci(n-2)
        }
        countSum++ //非常耗性能,会不停的递归自己,这里是统计下递归了几次,数字越大,递归次数越大
        return
}



在命令行是正常的,但是在goland中,发现每次结果都不一样(第一次运行正确,连续run多次会出现,但是debug正常),总会丢失几行打印,这是什么情况。

[Golang] 纯文本查看 复制代码
数列第 1 位: 1,  递归次数1
数列第 2 位: 1,  递归次数1          
数列第 3 位: 2,  递归次数3          
数列第 4 位: 3,  递归次数5          
数列第 5 位: 5,  递归次数9          
数列第 6 位: 8,  递归次数15         
数列第 18 位: 2584,  递归次数5167
数列第 19 位: 4181,  递归次数8361
数列第 20 位: 6765,  递归次数13529
数列第 21 位: 10946,  递归次数21891
数列第 22 位: 17711,  递归次数35421
数列第 23 位: 28657,  递归次数57313
数列第 24 位: 46368,  递归次数92735
数列第 25 位: 75025,  递归次数150049
数列第 26 位: 121393,  递归次数242785
数列第 27 位: 196418,  递归次数392835
数列第 28 位: 317811,  递归次数635621
数列第 29 位: 514229,  递归次数1028457
数列第 30 位: 832040,  递归次数1664079
数列第 31 位: 1346269,  递归次数2692537
数列第 32 位: 2178309,  递归次数4356617
数列第 33 位: 3524578,  递归次数7049155
数列第 34 位: 5702887,  递归次数11405773
数列第 35 位: 9227465,  递归次数18454929
数列第 36 位: 14930352,  递归次数29860703
数列第 37 位: 24157817,  递归次数48315633
数列第 38 位: 39088169,  递归次数78176337
数列第 39 位: 63245986,  递归次数126491971
数列第 40 位: 102334155,  递归次数204668309
程序的执行时间为: 942.111ms次数1664079

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

kurama1982 发表于 2023-7-6 15:16
您遇到的问题可能与GoLand如何显示控制台输出有关。
GoLand具有控制折叠、包裹和修剪线条的设置,这些设置会影响控制台输出的显示方式1。
您可以尝试调整这些设置,看看它是否能解决问题。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
sbwfnhn + 1 + 1 热心回复!

查看全部评分

chenrubai 发表于 2023-7-6 15:41
本帖最后由 chenrubai 于 2023-7-6 15:46 编辑

使用fmt.Println而不是fmt.Printf,每次输出都会立即刷新到终端,这样就能避免在 GoLand 中出现丢失打印行的问题
[Golang] 纯文本查看 复制代码
package main

import (
        "fmt"
        "time"
)

var countSum int

func main() {
        result := 0
        start := time.Now()
        for i := 1; i <= 40; i++ {
                result = fibonacci(i)
                fmt.Println("数列第", i, "位:", result, "递归次数", countSum) // 打印结果及递归次数
                countSum = 0
        }
        end := time.Now()
        delta := end.Sub(start)
        fmt.Println("程序的执行时间为:", delta) // 打印程序执行时间
}

func fibonacci(n int) (res int) {
        if n <= 2 {
                res = 1
        } else {
                res = fibonacci(n-1) + fibonacci(n-2)
        }
        countSum++
        return
}

运行结果
[Asm] 纯文本查看 复制代码
标准输出:数列第 1 位: 1 递归次数 1
数列第 2 位: 1 递归次数 1
数列第 3 位: 2 递归次数 3
数列第 4 位: 3 递归次数 5
数列第 5 位: 5 递归次数 9
数列第 6 位: 8 递归次数 15
数列第 7 位: 13 递归次数 25
数列第 8 位: 21 递归次数 41
数列第 9 位: 34 递归次数 67
数列第 10 位: 55 递归次数 109
数列第 11 位: 89 递归次数 177
数列第 12 位: 144 递归次数 287
数列第 13 位: 233 递归次数 465
数列第 14 位: 377 递归次数 753
数列第 15 位: 610 递归次数 1219
数列第 16 位: 987 递归次数 1973
数列第 17 位: 1597 递归次数 3193
数列第 18 位: 2584 递归次数 5167
数列第 19 位: 4181 递归次数 8361
数列第 20 位: 6765 递归次数 13529
数列第 21 位: 10946 递归次数 21891
数列第 22 位: 17711 递归次数 35421
数列第 23 位: 28657 递归次数 57313
数列第 24 位: 46368 递归次数 92735
数列第 25 位: 75025 递归次数 150049
数列第 26 位: 121393 递归次数 242785
数列第 27 位: 196418 递归次数 392835
数列第 28 位: 317811 递归次数 635621
数列第 29 位: 514229 递归次数 1028457
数列第 30 位: 832040 递归次数 1664079
数列第 31 位: 1346269 递归次数 2692537
数列第 32 位: 2178309 递归次数 4356617
数列第 33 位: 3524578 递归次数 7049155
数列第 34 位: 5702887 递归次数 11405773
数列第 35 位: 9227465 递归次数 18454929
数列第 36 位: 14930352 递归次数 29860703
数列第 37 位: 24157817 递归次数 48315633
数列第 38 位: 39088169 递归次数 78176337
数列第 39 位: 63245986 递归次数 126491971
数列第 40 位: 102334155 递归次数 204668309
程序的执行时间为: 1.092597267s
 楼主| sbwfnhn 发表于 2023-7-6 16:36
本帖最后由 sbwfnhn 于 2023-7-6 16:39 编辑
chenrubai 发表于 2023-7-6 15:41
使用fmt.Println而不是fmt.Printf,每次输出都会立即刷新到终端,这样就能避免在 GoLand 中出现丢失打印行 ...

这个确实能解决行丢失问题。
但是出现了新的问题,偶尔会出现打印双行,双行的位置不固定。
应该是goland哪里设置或者版本有问题。 2023.1.2 2023.1.3两个版本都有这个问题。
8核16线程的CPU。

故障是第一次执行是正常的,一定要连续执行多次才会出现。但是点debug却是正常的。
 楼主| sbwfnhn 发表于 2023-7-6 17:03
kurama1982 发表于 2023-7-6 15:16
您遇到的问题可能与GoLand如何显示控制台输出有关。
GoLand具有控制折叠、包裹和修剪线条的设置,这些设置 ...

确实和控制台有关
发现关闭控制台的缓冲区就可以了,默认1024K

修改 bin/idea.properties
#idea.cycle.buffer.size=1024
idea.cycle.buffer.size=disabled
laowa 发表于 2023-7-18 11:58

大哥们有这个吗,应该是全网较好的资源了球球~

在此收集码神三国golang资源


链接:https://pan.baidu.com/disk/main#/transfer/send?surl=ADYAAAAAABDzxQ
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表