package main
import (
"fmt"
)
// n * n-1
func factorial(n int) int {
var total = 1
for i := n; i >= 1; i-- {
total *= i
}
return total
}
// 5 * 1 = 5 * 4 = 20 * 3 = 60 * 2 = 120 * 1 = 120
func factorialRecursive(n int) int {
if n < 1 {
return 1
}
return n * factorialRecursive(n -1)
}
func factorialTailRecursive(total, value int) int {
if value < 1 {
return total
}
return factorialTailRecursive(total * value, value -1)
}
func main() {
fmt.Println(factorial(7))
fmt.Println(factorialRecursive(6))
fmt.Println(factorialTailRecursive(1, 5))
}