瞧瞧这神奇的算法I
09 May 2016 Author: GIGI WANGAlgorithms are so magical. This is only the tips of the iceberg. 坚持每天记录一点儿,把丢掉的找回来…
1.欧几里得算法,求最大公约数
小学数学就学过的,但不是这种算法。详细的描述参考Wikipedia. WIKI:辗转相除法
Go语言的实现:
(1)循环
func gcd(x,y int) int { for y!=0 { x,y=y,x%y } return x }
(2)递归
func gcd(x,y int) int { if y==0 { return x }else { return gcd(y,x%y) } }
2.斐波那契数列
学习C语言时肯定接触过。 WIKI:斐波那契数列
斐波那契数列(意大利语:Successione di Fibonacci),又译费波拿契数、斐波那契数列、费氏数列、黄金分割数列。在数学上,费波那契数列是以递归的方法来定义:
- F_0=0
- F_1=1
- F_n = F_{n-1}+ F_{n-2}(n≧2)
当年教程中的写法:
func fibs (n int) int { if n==0 { return 0 } if n==1 { return 1 } if n>1 { k := fibs(n-1)+fibs(n-2) return k } return -1; }
这个算法时间复杂度O(?),没搞明白..是相当恐怖的。下面的使用数组改善算法:
func fibs(n int) int { x, y := 0, 1 for i := 0; i < n; i++ { x, y = y, x+y } return x }
其它的通项公式法这里就不再讨论…