sunshine
管理员
管理员
  • 最后登录2023-10-30
  • 发帖数170
  • 社区居民
阅读:7686回复:0

递归函数理解

楼主#
更多 发布于:2017-09-04 11:16
我们先来看一下定义。递归算法,是将问题转化为规模缩小的同类问题的子问题,每一个子问题都用一个同样的算法去解决。一般来说,一个递归算法就是函数调用自身去解决它的子问题。递归算法的特点:
  1. 在函数过程中调用自身。
  2. 在递归过程中,必须有一个明确的条件判断递归的结束,既递归出口。
  3. 递归算法简洁但效率低,通常不作为推荐算法。
上面这些是百度百科的解释,讲的也是十分明确,大家配合实例来细细琢磨。


递归的缺点:如果递归函数的终止条件不明确或者缺少终止条件会导致函数长时间运行,是用户界面处于假死状态。值得注意的是:浏览器对递归的支持熟练与JS调用栈大小直接相关,当使用太多递归甚至超过最大调用栈容量时,浏览器会报错误信息,各个浏览器对报错的提示信息也不一样。


下面我们先来看一下一个经典的递归阶乘函数:
function test(num){
    if(num <= 1){
        return 1;
    }else{
        return num * test(num-1);
    }
}

还有一些可以用递归的,大家可以敲一下代码,实现下,即可更深入的理解(递归经常作为面试题,参考大家的逻辑思维

斐波那契数列

 问题描述:1, 1, 2, 3, 5, 8, 13, 21, 34, ....... 求第n个数是多少。

走楼梯问题

问题描述:楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶或者3阶,计算共有多少种不同的走法。


最大公约数

问题描述:给两个数,如果两个数相等,最大公约数是其本身。如果不等,取两个数相减的绝对值和两个数中最小的数比较,相等则为最大公约,不等则继续上面的算法,直到相等。


汉诺塔

问题描述:大家都或多或少的玩过,这里就不再赘述了。



二分法快排

问题描述:使用二分法,对一个数组进行由小到大的排序。我之前也有个blog专门写过。http://www.cnblogs.com/YikaJ/p/4129569.html

 DOM树的递归

问题描述:获取一个节点的所有父节点的tagName

转自:http://blog.csdn.net/qq_33652761/article/details/53426829
游客


返回顶部

公众号

公众号