Go 斐波那契中的负数
如果我在输出中检查代码中的数字,如6,我得到了正确的8。如果我有99,那么我得到的是负数。此代码有什么问题:Go 斐波那契中的负数,go,fibonacci,Go,Fibonacci,如果我在输出中检查代码中的数字,如6,我得到了正确的8。如果我有99,那么我得到的是负数。此代码有什么问题: package main import ( "fmt" ) var num = 94 func main() { fmt.Printf("%d\n", fibo(num)) } func fibo(num int) int{ a, b := 0, 1 for i := 0; i < num; i++ { a, b = b, a + b } ret
package main
import (
"fmt"
)
var num = 94
func main() {
fmt.Printf("%d\n", fibo(num))
}
func fibo(num int) int{
a, b := 0, 1
for i := 0; i < num; i++ {
a, b = b, a + b
}
return a
}
主程序包
进口(
“fmt”
)
var num=94
func main(){
fmt.Printf(“%d\n”,fibo(num))
}
func fibo(num int)int{
a、 b:=0,1
对于i:=0;i
尝试将fibo
函数的返回类型从int
修改为uint64
,并将a
和b
声明为uint64
,与int
输出一样,它将溢出,这就是为什么会得到负值:
func fibo(num int) uint64{
var a, b uint64 = 0, 1
for i := 0; i < num; i++ {
a, b = b, a + b
}
return a
}
对于fibo(94)
它将输出:
19740274219868223167
这似乎和Python中一样合法,我用同样的逻辑得到同样的结果
希望有帮助 尝试将
fibo
函数的返回类型从int
修改为uint64
,并将a
和b
声明为uint64
,与int
输出一样,它将溢出,这就是为什么会得到负值:
func fibo(num int) uint64{
var a, b uint64 = 0, 1
for i := 0; i < num; i++ {
a, b = b, a + b
}
return a
}
对于fibo(94)
它将输出:
19740274219868223167
这似乎和Python中一样合法,我用同样的逻辑得到同样的结果
希望有帮助 这可能是一个溢出问题。这可能是一个溢出问题。关于溢出的额外有趣事实。
int
值的最大值约为20亿。fibo(99)
的值大约为218.922.995.834亿(不,不是打字错误)。只是为了让您了解溢出的规模:-)确切地说,它仍然不适用于像fibo(99)
这样大的数字,也不适用于fibo(94)
,因为它包含在示例中。目前,我正在看一个包big
,它可能会为这个问题提供任意的数据类型。int
值的最大值约为20亿。fibo(99)
的值大约为218.922.995.834亿(不,不是打字错误)。只是为了让您了解溢出的规模:-)确切地说,它仍然不适用于像fibo(99)
这样大的数字,也不适用于fibo(94)
,因为它包含在示例中。目前我正在看一个包big
,它可能会为这个问题提供任意的数据类型。