Golang递归 - 递归函数与实例

1,357 阅读3分钟

在这篇博文中,我们将通过实例来学习golang的递归函数。

什么是Golang的递归函数

Recursion 是一般的编程代码过程,其中方法或函数不断地调用自己。

Go语言支持使用函数recursion 。函数调用本身被称为递归函数。

使用这种技术,代码写起来很简单,但理解起来却很复杂。

递归函数的重要关键点:

  • 在同一函数内调用的函数
  • 在递归函数中指定一个退出条件总是好的
  • 它可以减少不必要的函数调用和代码行
  • 递归的缺点是代码逻辑性强,难以调试和检查代码

Golang中的递归语法

// function declaration  
func recursefunction(){  
//Code statements  
recursefunction();//function call itself  
}  
func main(){  
recursefunction() // Initialize first normal call  
}  

在上面的语法中:

  • 递归函数是在同一个函数中被调用的。
  • 递归过程继续执行,直到条件得到满足。
  • 否则,函数的执行将处于无限递归状态
  • 我们可以使用if else语句来防止无限递归,if块执行递归调用,else块将中断递归调用

声明了函数recursivefunction 。这将在正常的第一次调用中在主函数内被调用。recursivefunction()在同一个函数内被调用。它将被无限次地执行。我们必须发出一个手动的CTRL +C关键字来退出程序的执行。

下面是一个无限次递归的例子

package main  
  
import (  
 "fmt"  
)  
  
func recursivefunction() {  
 fmt.Println("welcome")  
 recursivefunction()  
}  
  
func main() {  
 recursivefunction()  
}  

输出是

welcome  
welcome  
welcome  
.....  
infite times  

在下面的例子中,递归函数被声明,并在正常的第一次函数调用时在主函数中被调用,同一个函数在同一个函数中被递归调用。这个递归调用执行了10次并从递归函数中退出。

package main  
  
import (  
 "fmt"  
)  
  
var count = 0  
  
func recursivemethod() {  
 count++  
 if count <= 10 {  
  fmt.Println(count)  
  recursivemethod()  
 }  
}  
  
func main() {  
 recursivemethod()  
}  

输出是

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  

如何使用递归函数生成阶乘数示例

一个递归函数被声明用来计算factorial 。它返回给定输入数的factorial

下面是一个计算阶乘数的程序代码。

package main  
  
import "fmt"  
  
func factorial(numb int) int {  
 if numb == 0 {  
  return 1  
 }  
 return numb * factorial(numb-1)  
}  
  
func main() {  
 result := factorial(5)  
 fmt.Print("Output for Factorial of 5 :", result)  
}  

输出是

Output for Factorial of 5 :120  

斐波那契数列计算的递归实例

下面的程序使用一个递归函数计算并返回给定输入数的斐波那契数列。

package main  
  
import "fmt"  
  
func fibonacci(value int) int {  
 if value == 0 || value == 1 {  
  return value  
 }  
 return fibonacci(value-2) + fibonacci(value-1)  
}  
func main() {  
 result := fibonacci(10)  
 fmt.Print("Output for Fibonacci series  of 10 :", result)  
}  

输出是

Output for Fibonacci series  of 10 :55  

递归匿名函数

匿名函数是一个没有名字的函数。递归函数也可以被声明为匿名函数。
以下是golang中递归匿名函数的示例程序

package main  
  
import "fmt"  
  
func main() {  
 var myfunction func()  
 myfunction = func() {  
  fmt.Println("Anonymous function example")  
  myfunction()  
  
 }  
 myfunction()  
  
}  

输出是

Anonymous function example  
Anonymous function example  
...  
...  
...  
infinite times  

总结

学习了递归函数的声明和语法以及有限和无限时间执行的例子。它还包括使用递归函数计算给定数字的阶乘和斐波那契数列。