Go语言学习——函数递归、类型别名和自定义类型

递归

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
}
posted @ 2022-05-22 17:33  寻月隐君  阅读(65)  评论(0编辑  收藏  举报