goland IDE工具运行结果与命令行执行不一致
本帖最后由 sbwfnhn 于 2023-7-6 17:11 编辑代码如下
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正常),总会丢失几行打印,这是什么情况。
数列第 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
您遇到的问题可能与GoLand如何显示控制台输出有关。
GoLand具有控制折叠、包裹和修剪线条的设置,这些设置会影响控制台输出的显示方式1。
您可以尝试调整这些设置,看看它是否能解决问题。 本帖最后由 chenrubai 于 2023-7-6 15:46 编辑
使用fmt.Println而不是fmt.Printf,每次输出都会立即刷新到终端,这样就能避免在 GoLand 中出现丢失打印行的问题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
}
运行结果
标准输出:数列第 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:39 编辑
chenrubai 发表于 2023-7-6 15:41
使用fmt.Println而不是fmt.Printf,每次输出都会立即刷新到终端,这样就能避免在 GoLand 中出现丢失打印行 ...
这个确实能解决行丢失问题。
但是出现了新的问题,偶尔会出现打印双行,双行的位置不固定。
应该是goland哪里设置或者版本有问题。 2023.1.2 2023.1.3两个版本都有这个问题。
8核16线程的CPU。
故障是第一次执行是正常的,一定要连续执行多次才会出现。但是点debug却是正常的。
kurama1982 发表于 2023-7-6 15:16
您遇到的问题可能与GoLand如何显示控制台输出有关。
GoLand具有控制折叠、包裹和修剪线条的设置,这些设置 ...
确实和控制台有关
发现关闭控制台的缓冲区就可以了,默认1024K
修改 bin/idea.properties
#idea.cycle.buffer.size=1024
idea.cycle.buffer.size=disabled
大哥们有这个吗,应该是全网较好的资源了球球~
在此收集码神三国golang资源
链接:https://pan.baidu.com/disk/main#/transfer/send?surl=ADYAAAAAABDzxQ
页:
[1]