我已经将Python阶乘函数转换为golang程序。Python代码如下所示
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问题如下,
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输出为零。终端输出如下:
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程序有什么问题?任何帮助都将不胜感激。
发布于 2017-03-12 11:15:17
这是溢出的结果。普通的Python int的大小是任意的。但是如果你使用一个大小的整数,例如使用numpy的64位整数,你会得到同样的问题:
>>> 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://stackoverflow.com/questions/42743269
复制相似问题