Go语言实现Fibonacci数列的两个算法(使用递归和不使用递归)
2014-03-04 17:04
561 查看
Fibonacci数列:1,1,2,3,5,8,13,21,,, (即从第三项起,每一项的值都等于前两项之后)
第一种,使用递归:
func fibonacci(a int) int {
if a == 1 || a == 2 {
return 1
}
return fibonacci(a-1) + fibonacci(a-2)
}
第二种,不使用递归:
func fibonacci_version2(index int) int {
if index == 1 || index == 2 {
return 1
}
a, b := 1, 1
for i := 3; i <= index; i++ {
a, b = b, (a + b)
}
return a + b
}
经过检验,使用非递归算法的效率要远远高于递归算法
第一种,使用递归:
func fibonacci(a int) int {
if a == 1 || a == 2 {
return 1
}
return fibonacci(a-1) + fibonacci(a-2)
}
第二种,不使用递归:
func fibonacci_version2(index int) int {
if index == 1 || index == 2 {
return 1
}
a, b := 1, 1
for i := 3; i <= index; i++ {
a, b = b, (a + b)
}
return a + b
}
经过检验,使用非递归算法的效率要远远高于递归算法
相关文章推荐
- 使用 Go 语言实现优雅的服务器重启
- 算法代码实现之三向切分快速排序,Golang(Go语言)实现
- 算法代码实现之选出第k小元素、中位数、最小的k个元素(线性复杂度),Golang(Go语言)实现
- 【算法题】使用递归和非递归实现单向链表的转置
- 使用中语言实现整数的因子分解算法
- 求助:使用AUTO LISP语言编写“递归生长算法生成TIN”的程序
- 递归实现有序链表(不需要使用两个指针)
- Go语言实现的简单TCP服务及使用MySql
- C++之实现两个链表合并(迭代和递归版本)(19)---《那些奇怪的算法》
- 使用递归下降算法分析数学表达式 -- 基于堆栈的计算器实现算法
- poj算法-使用C语言在VC++6.0实现poj1753(递归枚举)
- Go语言使用组合的方式实现多继承
- 算法代码实现之冒泡排序,Golang(Go语言)实现
- 算法代码实现之选择排序,Golang(Go语言)实现
- Go语言实现一致性哈希(Consistent Hashing)算法
- Go语言如何实现遗传算法
- go语言实现两个数组合并(merge)
- C语言经典算法(八)——递归实现斐波那契数列的两种方法
- Go语言二叉树定义及遍历算法实现
- ios使用OC写算法之递归实现八皇后