算法 in Golang:D & C(分而治之)
算法 in Golang:D & C(分而治之)
D & C 算法(策略)
- Divide & Conquer
- 属于递归算法的一种
- 其实它更像是一种思路、策略
递归
- 递归 Recursion
- 基线条件 Base Case
- 递归条件 Recursive Case
D & C 的步骤
- 找到一个简单的基线条件(Base Case)
- 把问题分开处理,直到它变为基线条件
例子
- 需求:将数组 [1, 3, 5, 7, 9] 求和
- 思路1:使用循环(例如 for 循环)
- 思路2:D & C (分而治之)
例子:D & C 策略
- 基线条件:空数组 [],其和为0
- 递归:[1, 3, 5, 7, 9]
- 1 + SUM([3, 5, 7, 9])
- 3 + SUM([5, 7, 9])
- 5 + SUM([7, 9])
- 7 + SUM([9])
- 9 + SUM([])
- 7 + SUM([9])
- 5 + SUM([7, 9])
- 3 + SUM([5, 7, 9])
- 1 + SUM([3, 5, 7, 9])
创建项目并用vscode 打开
~/Code/go via 🐹 v1.20.3 via 🅒 base
➜ mcd divide_conquer
Code/go/divide_conquer via 🐹 v1.20.3 via 🅒 base
➜ go mod init divide_conquer
go: creating new go.mod: module divide_conquer
Code/go/divide_conquer via 🐹 v1.20.3 via 🅒 base
➜ c
Code/go/divide_conquer via 🐹 v1.20.3 via 🅒 base
➜
main.go 代码:
package main
import "fmt"
func main() {
total := sum([]int{1, 3, 5, 7, 9})
fmt.Println("total: ", total)
}
func sum(arr []int) int {
if len(arr) == 0 {
return 0
}
return arr[0] + sum(arr[1:])
}
运行
Code/go/divide_conquer via 🐹 v1.20.3 via 🅒 base
➜ go run .
total: 25
Code/go/divide_conquer via 🐹 v1.20.3 via 🅒 base
➜
本文来自博客园,作者:寻月隐君,转载请注明原文链接:https://www.cnblogs.com/QiaoPengjun/p/17456710.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
2022-06-04 Go语言学习——结构体复习
2022-06-04 Go语言学习——结构体与JSON