惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Blog — PlanetScale
Blog — PlanetScale
Jina AI
Jina AI
MyScale Blog
MyScale Blog
N
Netflix TechBlog - Medium
月光博客
月光博客
云风的 BLOG
云风的 BLOG
T
The Blog of Author Tim Ferriss
博客园_首页
GbyAI
GbyAI
The Cloudflare Blog
博客园 - 叶小钗
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
Y
Y Combinator Blog
博客园 - 三生石上(FineUI控件)
量子位
博客园 - Franky
WordPress大学
WordPress大学
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
人人都是产品经理
人人都是产品经理
F
Fortinet All Blogs
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
M
MIT News - Artificial intelligence
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
InfoQ
Google DeepMind News
Google DeepMind News
S
SegmentFault 最新的问题
大猫的无限游戏
大猫的无限游戏
Apple Machine Learning Research
Apple Machine Learning Research
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Stack Overflow Blog
Stack Overflow Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Last Week in AI
Last Week in AI
J
Java Code Geeks
腾讯CDC
aimingoo的专栏
aimingoo的专栏
C
Check Point Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
Vulnerabilities – Threatpost
S
Schneier on Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
Lohrmann on Cybersecurity
S
Securelist
F
Full Disclosure
Cisco Talos Blog
Cisco Talos Blog
小众软件
小众软件
The GitHub Blog
The GitHub Blog

博客园 - dribs

PD分离 基于GPT2训练构建医疗问诊机器人 物流行业信息咨询智能问答系统 day8 golang-chan-协程-定时器-锁-等待组 day7 golang GMP golang面试题单向链表和双向链表 golang 自行实现一个base64加密 golang标准库log+第三方zerolog golang标准库序列化反序列化 json + 第三方msgpack golang 标准库 目录操作 golang-day1 进制 golang-标准库文件操作 golang-标准库时间time day6 golang-标准库(随时更新) golang--day5结构体+结构体排序+错误处理+结构体和接口实现面向对象的例子 ceph warn oldest client/flush tid ceph 扩容后healt-error k8s系列---pod手动驱逐 k8s系列---Chart(下)
golang-day4函数
dribs · 2023-01-29 · via 博客园 - dribs

2023-01-29 21:58  dribs  阅读(47)  评论()    收藏  举报

斐波那契数列三种实现方式

1、循环实现

func fib1(n int) int {
	//完整逻辑
	switch {
	case n < 0:
		panic("n is negative")
	case n == 0:
		return 0
	case n == 1 || n == 2:
		return 1
	}
	a, b := 1, 1
	for i := 0; i < n-2; i++ {
		a, b = b, a+b
	}
	return b
}

2、美丽的公式 递推公式完成

func fib2(n int) int {
	if n == 2 || n == 1 {
		return 1
	}
	return fib2(n-1) + fib2(n-2)
}

3、循环改调用

func fib3(n, a, b int) int {
	if n < 3 {
		return b
	}
	return fib3(n-1, b, a+b)
}
package main

import (
	"fmt"
)

//美丽公式
func fac1(n int) int {
	//fac(n)= n * (n-1)!
	if n == 0 || n == 1 {
		return 1
	}
	return n * fac1(n-1)
}

//循环
func fac2(n int) int {
	//fac2(n) = 1 * 2 *3 *...*n
	//fac2(3)= 1 * 2 * 3
	if n == 0 || n == 1 {
		return 1
	}
	a := 1
	for i := 1; i < n+1; i++ {
		a *= i
	}
	return a
}

//循环改调用
func fac3(n, a int) int {
	if n < 2 {
		return a
	}
	return fac3(n-1, a*n) //4 ,3 1*4=4; 3, 2 4*3=12; 2, 1 12*2=24
}

//倒三角循环实现
func n1(n int) {
	//2 1
	//  1
	a := n
	b := 0
	for i := 1; i <= n; n-- {
		if n < 9 {
			b++
			fmt.Printf("%[1]*s", 3*(a-n)-b, "")
		}
		if n > 8 && n < a {
			fmt.Printf("%[1]*s", 3*(a-n), "")
		}
		for j := n; j >= i; j-- {
			fmt.Printf("%d ", j)
		}

		println()
	}
}

//正三角循环实现
func n2(n int) {
	//  1
	//2 1
	b := 9
	for i := 1; i <= n; i++ {
		if i > 8 {
			fmt.Printf("%[1]*s", 3*(n-i), "")
		}
		if i < 9 {
			b--
			fmt.Printf("%[1]*s", 3*(n-i)-b, "")
		}
		for j := i; j >= 1; j-- {
			fmt.Printf("%d ", j)
		}
		println()
	}
}

func main() {
	//阶乘三种实现
	println(fac1(4))
	println(fac2(4))
	println(fac3(4, 1))

	//倒三角
	n1(12)
	//正三角
	n2(12)
}