【愚公系列】2022年07月 Go教学课程 025-递归函数

举报
愚公搬代码 发表于 2022/07/31 18:42:06 2022/07/31
【摘要】 一、递归函数如果一个函数在内部调用自身本身,这个函数就是递归函数。递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。构成递归的条件:子问题须与原始问题为同样的事,且更为简单不能无限制地调用本身,须有个出口,化简为非递归状况处理 1.递归函数的基本使用package mainimport "fmt"func main() { c:=...

一、递归函数

如果一个函数在内部调用自身本身,这个函数就是递归函数。

递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。

构成递归的条件:

  • 子问题须与原始问题为同样的事,且更为简单
  • 不能无限制地调用本身,须有个出口,化简为非递归状况处理

1.递归函数的基本使用

package main

import "fmt"

func main() {
   c:=Test(3)
   fmt.Println(c)
}
func Test(n int) int {
	// 只有第一排的人才知道自己的排数
	if n == 1{
		return 1
	}
	// 如果不是第一排,问一下前一排的人
	r := Test(n-1)
	fmt.Println("前一排的排数:",r)
	// 把前一排人的排数+1,计算出自己的排数。
	return r+1
}

在这里插入图片描述

3.相关案例

一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。
亦即n!=1×2×3×…×(n-1)×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。

package main

var s int = 1

func main() {
	TestDemo(5)
	print(s)
}
func TestDemo(n int) {
	if n == 1 {
		return
	}
	s *= n
	TestDemo(n - 1)
}

在这里插入图片描述

总结

递归就是一个函数在其内部可以调用其本身,那么这个函数就是递归函数即自己调用自己的函数

  • 优点:结构清晰,可读性强,可以极大的减少代码量,用有限的语句来定义对象的无限集合。
  • 缺点:效率低,调用栈可能会溢出:函数每次调用都会在内存栈中分配空间,而每个进程的容量是有限的,当调用的层次太多时,就会超出栈的容量,从而导致溢出。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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