算法实现系列:贴出自己丑陋的代码,供以后自嘲用。欢迎大家贡献出自己的实现方案,发送代码到我邮箱 425693275@qq.com,之后我再添加进文章,并注明代码出处。或者在评论里贴出代码实现的链接。
Fibonacci数定义:
- F0=0
- F1=1
- F(n)=F(n−1)+F(n−2)
用文字来说,就是斐波那契数列列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。
如:0、1、1、2、3、5、8、13、21、……
算法
//递归
Fabonacci(n) {
if n == 0 return 0
if n == 1 return 1
else return Fabonacci(n - 1) + Fabonacci(n -2)
}
/**using Dynamic Programming
*记录算过的值,避免重复计算
*O(n) = n
*/
make and let array[0..n] be -1
Fabonacci(array, n) {
if(aray[n] > 0) return aray[n]
else if(n == 0) array[n] = 0
else if(n == 1) array[n] = 1
else {
array[n] = Fabonacci(n - 1) + Fabonacci(n - 2)
}
return array[n]
}
scala实现
// 实现
object Fabonacci {
def main(args: Array[String]) {
val m = new Array[Int](args(0).toInt)
for(i <- 0 until m.length) m(i) = -1
Fabonacci(m, m.length - 1)
println(m.mkString(" "))
}
def Fabonacci(r: Array[Int], n: Int): Int = {
r(n) =
if(r(n) > 0) r(n)
else if(n == 0) 0
else if(n == 1) 1
else {
Fabonacci(r, n - 1) + Fabonacci(r, n - 2)
}
r(n)
}
}
//测试
>scala Fabonacci 10
0 1 1 2 3 5 8 13 21 34