Go 斐波那契中的负数

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

如果我在输出中检查代码中的数字,如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
  }
  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
,它可能会为这个问题提供任意的数据类型。