doupa9062 2017-03-12 03:06
浏览 51
已采纳

Golang阶乘显示错误结果

I have converted a Python factorial function into a golang program . The Python code is as follows

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)

And the Golang problem is as follows ,

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))

}

The results of both the programs are same for small numbers.But for bigger numbers The Go output is zero. The Terminal output is as follows ,

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$ 

What's wrong with the Go Program for larger numbers? Any help would be appreciated.

  • 写回答

1条回答 默认 最新

  • dosc9472 2017-03-12 03:15
    关注

    This is the result of overflow. Vanilla Python ints are arbitrarily sized. But if you use a sized int, e.g. 64 bit-ints using numpy for example, you get the same problem:

    >>> 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
    

    I am not a golang programmer, but a quick search yielded the following from the standard library:

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来