Go big.Int факториал с рекурсией

Я пытаюсь реализовать этот фрагмент кода:

func factorial(x int) (result int) {
  if x == 0 {
    result = 1;
  } else {
    result = x * factorial(x - 1);
  }
  return;
}

как big.Int, чтобы сделать его эффективным для больших значений x.

Следующее возвращает значение 0 для fmt.Println (factorial (r))

Факториал 7 должен быть 5040?

Любые идеи о том, что я делаю неправильно?

package main

import "fmt"
import "math/big"

func main() {
        fmt.Println("Hello, playground")

    //n := big.NewInt(40)
    r := big.NewInt(7)

    fmt.Println(factorial(r))

}

func factorial(n *big.Int) (result *big.Int) {
    //fmt.Println("n = ", n)
    b := big.NewInt(0)
    c := big.NewInt(1)

    if n.Cmp(b) == -1 {
        result = big.NewInt(1)
    }
    if n.Cmp(b) == 0 {
        result = big.NewInt(1)
    } else {
        // return n * factorial(n - 1);
        fmt.Println("n = ", n)
        result = n.Mul(n, factorial(n.Sub(n, c)))
    }
    return result
}

Этот код на игровой площадке:http://play.golang.org/p/yNlioSdxi4

11
задан Greg 30 June 2012 в 00:55
поделиться