首页新闻找找看学习计划

分治与递归的关系

0
悬赏园豆:20 [待解决问题]

分治算法会用到递归,递归函数的复杂度都普遍高于非递归函数,请问分治算法使用递归的意义是什么,对分治的复杂度有什么影响呢

懒懒的就这样儿的主页 懒懒的就这样儿 | 初学一级 | 园豆:139
提问于:2015-10-11 13:30
< >
分享
所有回答(1)
1

递归函数的复杂度高于非递归函数的说法是不太准确的…一般只说递归函数的常数比较大…

使用递归的最大的好处就是代码简洁…

(其实一切递归函数都可以用自己写一个栈模拟来转化为非递归)

对分治的复杂度来说,并不会有什么影响…当然也只是常数比非递归大一点,但是写起来方便很多。

(上面是对于递归函数和非递归函数的分析)

(下面是对于递归算法和递推算法的分析)

需要注意的是,如果出现冗余计算,递归的复杂度就真的会变高了,而递推就比较少出现冗余。

举个例子就是斐波那契数列的递推方法和递归方法的区别,如果用递归,会导致同一个位置的值多次被计算,

而计算的代价是很高的,因为下面每层都会产生大量冗余计算。

这种时候可以使用一个办法存储已经计算出的值,避免重复计算,也就是记忆化。

记忆化之后,保证不出现冗余计算,所以递归计算的复杂度和递推是一样的。

而在一些特殊情况下,递归的记忆化搜索甚至比递推要快,这种情况就是需要计算的问题比较离散的时候,

这时递推往往计算出很多不需要的位置,而记忆化搜索只计算了需要的位置。

MoebiusMeow | 园豆:209 (菜鸟二级) | 2015-12-03 22:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册