Go 递归

在计算机编程中,递归函数会调用自身。例如,

func recurse() {
  … …
  … …
  recurse()
}

这里,recurse() 函数在其主体中包含函数调用。因此,它是一个 Go 递归函数,这种技术称为递归。

在学习递归之前,请确保了解 Go 函数


示例:Golang 中的递归

package main
import "fmt"

func countDown(number int) {

  // display the number
  fmt.Println(number)

// recursive call by decreasing number countDown(number - 1)
} func main() { countDown(3) }

输出

Countdown Starts:
3
2
1
0
-1
…
…

在上面的示例中,我们创建了一个名为 countDown() 的函数。请注意,我们在函数内部添加了函数调用。

countDown(number - 1)

这里,这是一个递归函数调用,我们在每次调用时都减小 number 的值。

但是,此函数将无限执行,因为我们直接在函数内部添加了函数调用。

为避免无限递归,我们使用条件语句,并且仅在满足条件时才调用函数。


带条件语句的递归函数

在本例中,我们将使用 if...else 语句来防止无限递归。

// Program to end the recursive function using if…else

package main
import "fmt"

func countDown(number int) {

  if number > 0 {
    fmt.Println(number)

// recursive call countDown(number - 1)
} else { // ends the recursive function fmt.Println("Countdown Stops") } } func main() { countDown(3) }

输出

Countdown Starts
3
Countdown Starts
2
Countdown Starts
1
Countdown Starts
Countdown Stops

在上面的示例中,我们将递归调用添加到了 if 语句中。

if number > 0 {
  fmt.Println(number)

  // recursive call
  countDown(number - 1)
}

这里,我们仅在 number 大于 0 时才调用该函数。

如果 number 不大于 0,则递归结束。这称为停止条件。

程序工作原理

number > 0 打印 递归调用
true 3 countDown(2)
true 2 countDown(1)
true 1 countDown(0)
false 倒计时停止 函数执行停止
Print countdown using go recursion
Golang 中的递归

示例:Go 计算正数之和的程序

package main
import "fmt"

func sum(number int) int {

  // condition to break recursion
  if number == 0 {
    return 0
  } else {
    return number + sum(number-1)
  }
}

func main() {
  var num = 50

  // function call
  var result = sum(num)

  fmt.Println("Sum:", result)
}

输出

Sum: 1275

在上面的示例中,我们创建了一个名为 sum() 的递归函数,当 number 的值不等于 0 时,它会调用自身。

return number + sum(number - 1)

在每次迭代中,我们通过将 number 的值减 1 来调用该函数。

程序工作方式如下:

  • 第一次调用时,number 的值为 50,不等于 0。因此,执行 else 块,该块返回 50 + sum(49)
  • 同样,49 不等于 0,因此执行 return 49 + sum(48)
  • 此过程一直持续到 number 变为 0。当 number0 时,将执行 return 0,并将其添加到其他值中。
  • 因此,最终,将计算 50 + 49 + 48 + ...... + 0 并返回到 main() 函数。

使用 Go 递归计算数字的阶乘

package main
import "fmt"

func factorial (num int) int {

  // condition to break recursion
  if num == 0 {
    return 1
  } else {
    // condition for recursion call
    return num * factorial (num-1)
   }
}

func main() {
  var number = 3
  
  // function call
  var result = factorial (number)

  fmt.Println("The factorial of 3 is", result)
}

输出

The factorial of 3 is 6

在上面的示例中,我们创建了一个名为 factorial() 的递归函数,当 num 的值不等于 0 时,它会调用自身。

return num * factorial(num - 1)

在每次调用中,我们将 num 的值减 1

程序工作方式如下:

Computing Factorial Using Recursion
使用递归计算阶乘
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战