递归 package mainimport "fmt"// 递归:自己调用自己// 递归适合处理那种问题相同、问题规模越来越小的场景// 递归一定要有一个明确的退出条件// 永远不要高估自己// 3! = 3 * 2 * 1 = 3* 2!// 4
递归
package main
import "fmt"
// 递归:自己调用自己
// 递归适合处理那种问题相同、问题规模越来越小的场景
// 递归一定要有一个明确的退出条件
// 永远不要高估自己
// 3! = 3 * 2 * 1 = 3* 2!
// 4! = 4 * 3 * 2 * 1 = 4 * 3!
// 5! = 5 * 4 * 3 * 2 * 1 = 5 * 4!
// 计算n的阶乘
func f(n uint64) uint64 {
if n <= 1 {
return 1
}
return n * f(n-1)
}
// 上台阶的面试题
// n个台阶,一次可以走一步,也可以走两步,有多少种走法
func taijie(n uint64) uint64 {
// 如果只有一个台阶 就一种走法
if n == 1 {
return 1
}
if n == 2 {
return 2
}
return taijie(n-1) + taijie(n-2)
}
func main(){
ret := f(5)
fmt.Println(ret)
res := taijie(3)
fmt.Println(res)
}
结构体(struct)
类型别名和自定义类型
Go语言中可以使用type关键字来定义自定义类型
类型别名规定:TypeAlias只是Type的别名,本质上TypeAlias与Type是同一个类型
package main
import "fmt"
// 自定义类型和类型别名
// type 后面跟的是类型
type myInt int // 自定义类型 编译完之后也保留
type yourInt = int // 类型别名 只在代码编写过程中有效 编译完就没有了
func main () {
var n myInt
n = 100
fmt.Println(n)
fmt.Printf("%T\n", n) // main.myInt
var m yourInt
m = 100
fmt.Println(m)
fmt.Printf("%T\n", m) // int
var c rune
c = '中'
fmt.Println(c)
fmt.Printf("%T\n", c) // int32
}