递归

递归是一个及其神奇的方法,可以用很简单代码实现一些比较复杂的思维

拿一个大家都很感兴趣的问题作为例子:

假设每年最后的一天存入10w,每年理财获益10%,10年后是多少钱?

// year工作年限,per年收益,money年存入
function sum(year, per, money) {
    if(year>1) {
        return sum(--year, per, money) * (per + 1) + money
    } else {
        return money
    }
}

算下:

sum(10,0.1,10)
//159.37424601000006

这就是一个典型的递归例子了

sum(--year, per, money) * (per + 1) + money

递归最终会形成   ((((sum(1) * (per+1) + money) * (per+1) + money) * (per+1) + money) * .....)的模式

ps:知道调用栈的童鞋,大概会知道其实从性能上说,如果数据量很大,递归是很占内存的,往往性能上比不上循环,但是依然有很多算法都用了递归,因为递归确实使得程序代码思路更加清晰明了!!

当然又想用递归又不想把调用栈堆慢,也是有解决方法的就是“尾递归”了,并非每一个编程语言都支持“尾递归”,这个算法博主会在以后的博文介绍。

原文地址:https://www.cnblogs.com/amiezhang/p/8485912.html