首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Golang Factorial显示错误的结果

Golang Factorial显示错误的结果
EN

Stack Overflow用户
提问于 2017-03-12 11:06:48
回答 1查看 373关注 0票数 0

我已经将Python阶乘函数转换为golang程序。Python代码如下所示

代码语言:javascript
复制
def  main():
    n = input('Enter a number')
    result = factorial(n)
    print(result)

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

Golang问题如下,

代码语言:javascript
复制
package main

import "fmt"

func main() {
    fmt.Println("Enter a Number ")
    var n int64
    var result int64
    fmt.Scan(&n)
    result = factorial(n)
    fmt.Println(result)
}

func factorial(n int64) int64 {
    //fmt.Println(n)
    if n == 0 {
        return int64(1)
    }
    //fmt.Println(n * factorial(n-1))
    return int64(n * factorial(n-1))

}

对于较小的numbers.But,两个程序的结果是相同的。对于较大的数字,Go输出为零。终端输出如下:

代码语言:javascript
复制
enKats-MacBook-Air:Factorials venkat$ python factorial.py
Enter a number5
120
VenKats-MacBook-Air:Factorials venkat$ go run factorial.go
Enter a Number 
5
120
VenKats-MacBook-Air:Factorials venkat$ python factorial.py
Enter a number99
933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000
VenKats-MacBook-Air:Factorials venkat$ go run factorial.go
Enter a Number 
99
0
VenKats-MacBook-Air:Factorials venkat$ 

对于更大的数字,Go程序有什么问题?任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-12 11:15:17

这是溢出的结果。普通的Python int的大小是任意的。但是如果你使用一个大小的整数,例如使用numpy的64位整数,你会得到同样的问题:

代码语言:javascript
复制
>>> import numpy as np
>>> def factorial(n):
...   if n == 0:
...     return np.int64(1)
...   else:
...     return n * factorial(n - np.int64(1))
...
>>> factorial(99)
__main__:5: RuntimeWarning: overflow encountered in long_scalars
0

我不是一个golang程序员,但是通过快速搜索,我从标准库中找到了以下内容:

https://golang.org/pkg/math/big/

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42743269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档