背景
有一次和同事聊天,提到了迭代和递归,除了上学那会儿,这概念好久不用。突然有点儿懵逼,简单思考记录如下。
递归
原问题采用分而治之思想,可分解成子问题,且子问题解决的逻辑与原问题一样,但规模更小,采用轮回范式。
在程序实现中,递归代码在形式上的体现是:
- 程序自己调用自己。
- 不能无限调用,要有个程序出口。
缺点:一般认为性能不好,玩不好会栈(stack)溢出。
迭代
迭代也叫辗转法,通过一次次的循环,一轮轮的计算,不断用旧值推新值(推陈出新),接近或得到最终结果。个人感觉,迭代中可以分而治之,也可不分而治之,每轮迭代中的逻辑不一定与原问题解决逻辑等价。
迭代思想的体现:
- 求最大公约数的欧几里得算法。
- 求近似平方根的牛顿迭代法。
- 二分查找法。
- 持续交付,不断优化。