【算法优化】线性计算_斐波那契数列和传统递归对比
; 20层以内,递归写法简洁,20层以上,斐波那契数列效率高
t := A_TickCount
MsgBox % fn(25) "`n" A_TickCount - t "毫秒"
; 传统递归
fn(n) {
if n < 2
return n
return fn(n - 1) + fn(n - 2)
}
t1:=A_TickCount
Loop 50
记录 .= A_Index " = " 斐波那契数列(A_Index) "`n"
MsgBox % "耗时:" A_TickCount - t1 " 毫秒`n" 记录
return
; 函数
斐波那契数列(n) {
if (n=1)
s2 := 1
else {
s1 := 0
s2 := 1
Loop % n-1 {
s2_tmp := s2
s2 := s1 + s2
s1 := s2_tmp
}
}
return s2
}
Esc::ExitApp
/*
刚刚百度了一下,同样问题递归的时间复杂度跟循环一样吧?只不过函数调用使递归产生额外的开销,但这个性能损失好像不足以影响时间复杂度
斐波那契,迭代是O(n),递归就成了O(2^n)
因为有非常多的重复求解
对象的深拷贝 相当于对每个对象都操作一次。 用什么方法 都需要对对象至少操作一次。
斐波那契数列的计算,如果用递归计算,比如算第50个值,则前面的很多数都会被计算很多次(重复计算 浪费时间)
斐波那契还可以用矩阵快速幂,复杂度更低,O(log n)
*/
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)