文章标签 » 算法

神奇的递归

作为程序员不知道你有没有过跟我一样的感觉:有些算法的设计真精妙,真神奇!

举个例子,比如递归。

先考虑这样的一个程序题:将 1 到 10 依次累加。
你会怎么处理?

最容易想到的办法可能就是循环了。

1
2
3
4
5
// simple loop construct
var acc = 0;
for (var i = 1; i <= 10; ++i)
    acc += i;
alert(acc); // result is 55

但如果不用循环呢?
还能怎么实现?

看看下面这块代码:

1
2
3
4
5
6
7
// without loop construct or variables (recursion)
function sumRange(start, end, acc) {
    if (start > end)
        return acc;
    return sumRange(start + 1, end, acc + start)
}
alert(sumRange(1, 10, 0)); // result is also 55

这就是递归了。是不是很神奇?!

作为一个老程序员,写代码或看代码的时候,时不时的会有这样的时候:靠,代码还可以这么写啊,真妙!

via Mdeium