logo
天地变化的道理
使用率很高网站
生活要常常分享
免费为您秀产品

斐波那契数列算法,golang实现

斐波那契数列又称黄金分割数列,因数学家列昂纳多.斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。莱昂纳多是一位著名的意大利数学家 , 最重要的成就是发现了一组可以描述自然比例数字 0、1、1、2、3、5、8、13、21、34、55、89……,观察该数列可以发现前2项的数字相加等于后一项的数字,比如 1+1=2;1+2=3;2+3=5;3+5=8;5+8=13。

F(1)=1
F(2)=1
F(n)=F(n - 1)+F(n - 2) (n ≥ 3)

有趣的是,而前一项与后一项的比值组成的数列竟然存在极限,且这个极限值恰好就是美学中非常重要的黄金分割比。例如 F(9)/F(10) = 0.618182 。

F(n)/F(n+1) -> 0.618

go语言算法实现

package main

import "fmt"

func fib(n int) int {
	x, y := 0, 1
	for i := 0; i < n; i++ {
		x, y = y, x+y
	}

	return x
}

func main() {
	for x := 1; x <= 20; x++ {
		r := fmt.Sprintf("F(%d) = %d", x, fib(x))
		fmt.Println(r)
	}

	for x := 20; x > 3; x-- {
		r := fmt.Sprintf("F(%d)/F(%d) = %.4f", x, x+1, float64(fib(x))/float64(fib(x+1)))
		fmt.Println(r)
	}
}

执行结果

F(1) = 1
F(2) = 1
F(3) = 2
F(4) = 3
F(5) = 5
F(6) = 8
F(7) = 13
F(8) = 21
F(9) = 34
F(10) = 55
F(11) = 89
F(12) = 144
F(13) = 233
F(14) = 377
F(15) = 610
F(16) = 987
F(17) = 1597
F(18) = 2584
F(19) = 4181
F(20) = 6765
F(20)/F(21) = 0.6180
F(19)/F(20) = 0.6180
F(18)/F(19) = 0.6180
F(17)/F(18) = 0.6180
F(16)/F(17) = 0.6180
F(15)/F(16) = 0.6180
F(14)/F(15) = 0.6180
F(13)/F(14) = 0.6180
F(12)/F(13) = 0.6180
F(11)/F(12) = 0.6181
F(10)/F(11) = 0.6180
F(9)/F(10) = 0.6182
F(8)/F(9) = 0.6176
F(7)/F(8) = 0.6190
F(6)/F(7) = 0.6154
F(5)/F(6) = 0.6250
F(4)/F(5) = 0.6000

求极限的算法在一些场合经常用到,y=f(x),y随着x的增长,始终不超过某个极限值。

Posted by 肖得胜 on 2024/1/10
本站由爱斯园团队开发维护,感谢
那些提出宝贵意见和打赏的网友,没有你们的支持,
网站不可能发展到今天,
继往开来,善终如始,我们将继续砥砺前行。
Copyright ©2014 粤ICP备2025415817号-2