尾递归=递归+迭代?

▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼

0 引言

        平时见惯了递归和迭代,递归直观,但太占内存和时间,迭代运算快,但是不如递归代码简洁明了。那么可不可以把这两种算法的优点糅合在一起?答案是肯定的,尾递归就提供了这样一种机制。


1 尾递归是什么

        简单地说,尾递归就是披着“递归”的外衣,却拥有一颗“迭代”的心。外观上看起来像递归,但内部进行了迭代的运算。下面举例说明。


2 阶乘示例

        2.1 先看阶乘迭代算法:

尾递归=递归+迭代?_第1张图片

        2.2 再看阶乘递归算法:

尾递归=递归+迭代?_第2张图片

        2.3 最后看阶乘尾递归算法:

尾递归=递归+迭代?_第3张图片


3 斐波那契数列示例

        3.1 先看斐波那契数列迭代算法:

尾递归=递归+迭代?_第4张图片

        3.2 再看斐波那契数列递归算法:

尾递归=递归+迭代?_第5张图片

        3.3 最后看斐波那契数列尾递归算法:

尾递归=递归+迭代?_第6张图片


4 小结

        通过示例可以看出,尾递归都是带着一个“迭代变量”不断向深处递归,相当于边递归,边计算,等递归完成时,结果也计算出来了。值得一提的是尾递归只是借了递归的外壳本质还是在迭代,所以在效率上,应该是与迭代相仿的。


▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

你可能感兴趣的:(★编程练习,尾递归,递归,迭代,阶乘,斐波那契数列)