Go 언어의 int64 타입은 C 언어의 long long 타입에 해당한다. 즉 int64 타입은 64 비트(8 바이트)의 메모리공간을 차지하는 부호 있는 정수이다.


int64 타입의 한계로 인하여 20! 까지만 정확히 계산되었다.

* 소스 파일명: recursiveFactorial.go

package main

import (
    "fmt"
)

func recFacto(y int64, k, n int) int64 {
    if n <= 1 {
        return 1
    } else if k == n {
        return y
    }
    return recFacto(y*int64(k+1), k+1, n)
}

func factorial(n int) int64 {
    return recFacto(1, 1, n)
}

func main() {
    var n int = 25
    var i int
    for i = 0; i <= n; i++ {
        fmt.Printf("%d! = %d\n", i, factorial(i))
        if i == 20 {
            fmt.Printf("-- below calc are fault ----\n")
        }
    }
}



실행 결과:
프롬프트> go run recursiveFactorial.go
0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800
11! = 39916800
12! = 479001600
13! = 6227020800
14! = 87178291200
15! = 1307674368000
16! = 20922789888000
17! = 355687428096000
18! = 6402373705728000
19! = 121645100408832000
20! = 2432902008176640000
-- below calc are fault ----
21! = -4249290049419214848
22! = -1250660718674968576
23! = 8128291617894825984
24! = -7835185981329244160
25! = 7034535277573963776



 

Posted by Scripter
,