在计算机编程中,递归函数会调用自身。例如,
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 |
倒计时停止 | 函数执行停止 |

示例: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。当 number 为 0 时,将执行
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。
程序工作方式如下:
