写个golang递归算法
时间: 2023-09-30 21:09:57 浏览: 47
以下是一个简单的递归算法,用于计算斐波那契数列的第n项:
```go
func fibonacci(n int) int {
if n <= 1 {
return n
} else {
return fibonacci(n-1) + fibonacci(n-2)
}
}
```
这个递归算法基于斐波那契数列的定义:前两个数是0和1,后面的每个数都是前两个数的和。因此,递归调用了自身来计算前两个数的和。当n <= 1时,直接返回n,否则递归调用fibonacci(n-1)和fibonacci(n-2),并将它们的和返回。
相关问题
用golang写一个快速排序算法
Go 语言实现快速排序的代码如下:
```
package main
import (
"fmt"
)
func quickSort(arr []int, left int, right int) {
if left < right {
pivot := partition(arr, left, right)
quickSort(arr, left, pivot-1)
quickSort(arr, pivot+1, right)
}
}
func partition(arr []int, left int, right int) int {
pivot := arr[right]
i := left - 1
for j := left; j < right; j++ {
if arr[j] < pivot {
i++
arr[i], arr[j] = arr[j], arr[i]
}
}
arr[i+1], arr[right] = arr[right], arr[i+1]
return i + 1
}
func main() {
arr := []int{4, 5, 1, 6, 2, 7, 3, 8}
quickSort(arr, 0, len(arr)-1)
fmt.Println(arr)
}
```
在这段代码中,`quickSort` 函数是实现快速排序的主要递归函数,`partition` 函数负责实现分区的操作。
golang麻将胡牌算法
麻将胡牌算法是用来判断一手牌是否能够胡牌的算法,它是在麻将游戏中非常重要的一部分。
Golang中可以使用递归的方式实现麻将胡牌算法。首先,我们需要定义麻将的牌型和点数,例如万、筒、索,以及相应的编号。然后,我们需要将一手牌进行排序,以方便后续的计算。
接下来,我们可以使用递归的方式进行判断。具体步骤如下:
1. 首先判断是否满足胡牌的基本条件,例如手牌数量为14张,或者13张手牌加上一张牌后正好能胡牌。
2. 如果满足基本条件,我们可以进行深度优先搜索,遍历所有可能的胡牌方式。
3. 对于每一种胡牌方式,我们需要从手牌中选择一对或者三张一样的牌作为刻子或者顺子,然后将这些牌从手牌中移除,并继续进行递归判断。
4. 如果成功进行递归判断,并且手牌已经为空,那么说明可以胡牌,返回true。
5. 如果遍历完所有的刻子和顺子的组合仍然没有胡牌的情况,返回false。
需要注意的是,在递归判断之前,我们需要对已经排序的手牌进行预处理,将连续的牌组合成顺子,这样可以减少搜索的次数。
通过以上的步骤,我们可以实现麻将胡牌算法。这是一个比较复杂的问题,但是使用Golang的递归方式可以简洁地解决。