递归是一个及其神奇的方法,可以用很简单代码实现一些比较复杂的思维
拿一个大家都很感兴趣的问题作为例子:
假设每年最后的一天存入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:知道调用栈的童鞋,大概会知道其实从性能上说,如果数据量很大,递归是很占内存的,往往性能上比不上循环,但是依然有很多算法都用了递归,因为递归确实使得程序代码思路更加清晰明了!!
当然又想用递归又不想把调用栈堆慢,也是有解决方法的就是“尾递归”了,并非每一个编程语言都支持“尾递归”,这个算法博主会在以后的博文介绍。