golang-day4函数
2023-01-29 21:58 dribs 阅读(18) 评论(0) 编辑 收藏 举报斐波那契数列三种实现方式
1、循环实现
func fib1(n int) int { //完整逻辑 switch { case n < 0: panic("n is negative") case n == 0: return 0 case n == 1 || n == 2: return 1 } a, b := 1, 1 for i := 0; i < n-2; i++ { a, b = b, a+b } return b }
2、美丽的公式 递推公式完成
func fib2(n int) int { if n == 2 || n == 1 { return 1 } return fib2(n-1) + fib2(n-2) }
3、循环改调用
func fib3(n, a, b int) int { if n < 3 { return b } return fib3(n-1, b, a+b) }
package main import ( "fmt" ) //美丽公式 func fac1(n int) int { //fac(n)= n * (n-1)! if n == 0 || n == 1 { return 1 } return n * fac1(n-1) } //循环 func fac2(n int) int { //fac2(n) = 1 * 2 *3 *...*n //fac2(3)= 1 * 2 * 3 if n == 0 || n == 1 { return 1 } a := 1 for i := 1; i < n+1; i++ { a *= i } return a } //循环改调用 func fac3(n, a int) int { if n < 2 { return a } return fac3(n-1, a*n) //4 ,3 1*4=4; 3, 2 4*3=12; 2, 1 12*2=24 } //倒三角循环实现 func n1(n int) { //2 1 // 1 a := n b := 0 for i := 1; i <= n; n-- { if n < 9 { b++ fmt.Printf("%[1]*s", 3*(a-n)-b, "") } if n > 8 && n < a { fmt.Printf("%[1]*s", 3*(a-n), "") } for j := n; j >= i; j-- { fmt.Printf("%d ", j) } println() } } //正三角循环实现 func n2(n int) { // 1 //2 1 b := 9 for i := 1; i <= n; i++ { if i > 8 { fmt.Printf("%[1]*s", 3*(n-i), "") } if i < 9 { b-- fmt.Printf("%[1]*s", 3*(n-i)-b, "") } for j := i; j >= 1; j-- { fmt.Printf("%d ", j) } println() } } func main() { //阶乘三种实现 println(fac1(4)) println(fac2(4)) println(fac3(4, 1)) //倒三角 n1(12) //正三角 n2(12) }