【算法优化】线性计算_斐波那契数列和传统递归对比
; 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)