【Golang】✔️走进 Go 语言✔️ 第十五课 递归 & 接口

举报
我是小白呀iamarookie 发表于 2021/09/10 00:46:54 2021/09/10
【摘要】 【Golang】✔️走进 Go 语言✔️ 第十五课 递归 & 接口 概述递归实现阶乘斐波那契数列 接口 概述 Golang 是一个跨平台的新生编程语言. 今天小白就带大家一起携...

【Golang】✔️走进 Go 语言✔️ 第十五课 递归 & 接口

概述

Golang 是一个跨平台的新生编程语言. 今天小白就带大家一起携手走进 Golang 的世界. (第 15 课)

在这里插入图片描述

递归

递归 (Recursion) 就是在运行的过程中自己调用自己.

在这里插入图片描述

实现阶乘

package main

import "fmt"

func main() {

	// 递归实现阶乘
	result := factorial(5)

	//调试输出
	fmt.Println(result)

}

func factorial(n int) int {
	
	//递归
	if (n > 1) {
		return n * factorial(n - 1)
	} else {
		return 1
	}

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

输出结果:

120

  
 
  • 1

斐波那契数列

package main

import "fmt"

func main() {

	// 递归实现斐波那契
	result := fiboacci(10)
	
	// 调试输出
	fmt.Print(result)

}

func fiboacci(num int) int {

	if num < 3 {
		return num
	} else {
		return fiboacci(num-1) + fiboacci(num-2)
	}
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

输出结果:

89

  
 
  • 1

接口

接口 (Interface) 可以帮助我们把所有具有共性的方法定义在一起. Go 的接口类型是对其他类型行为的抽象和概括. 因为接口和类型不会和特定的实现细节绑定在一起, 通过这种抽象的方式我们可以让对象更加零花和具有适应能力. 任何其他类型只要实现了这些方法就是实现了这个接口. (和多态类似)
在这里插入图片描述

格式:

/* 定义接口 */
type interface_name interface {
   method_name1 [return_type]
   method_name2 [return_type]
   method_name3 [return_type]
   ...
   method_namen [return_type]
}

/* 定义结构体 */
type struct_name struct {
   /* variables */
}

/* 实现接口方法 */
func (struct_name_variable struct_name) method_name1() [return_type] {
   /* 方法实现 */
}
...
func (struct_name_variable struct_name) method_namen() [return_type] {
   /* 方法实现*/
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

例子:

package main

import "fmt"

// 定义接口
type student interface{
	study()
}

// 定义结构体
type good_student struct {}

type bad_student struct {}

type horrible_student struct {}

// 定义方法
func (stu good_student) study() {
	fmt.Println("好好学习, 天天向上")
}

func (stu bad_student) study() {
	fmt.Println("一天天的, 就知道打游戏")
}

func (stu horrible_student) study() {
	fmt.Println("烧杀抢掠, 无恶不作")
}

// 主函数
func main() {

	var stud1 student = new(good_student)
	stud1.study()

	var stud2 student = new(bad_student)
	stud2.study()

	var stud3 student = new(horrible_student)
	stud3.study()

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

输出结果:

好好学习, 天天向上
一天天的, 就知道打游戏
烧杀抢掠, 无恶不作

  
 
  • 1
  • 2
  • 3

在这里插入图片描述

文章来源: iamarookie.blog.csdn.net,作者:我是小白呀,版权归原作者所有,如需转载,请联系作者。

原文链接:iamarookie.blog.csdn.net/article/details/119697187

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。