golang-day4函数
2023-01-29 21:58 dribs 阅读(30) 评论(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)
}
浙公网安备 33010602011771号