递归算法的理解

时间: 2019-09-04阅读: 940标签: 递归

递归:

所谓递归,就是既有传递,又有回归,与其说是传递与回归,初学不如理解是一种  “循序递进”与“规律约束”。

为什么这样说,因为递归算法相比较于循环在代码结构方面个人认为更加简洁清晰,清晰易懂,递归注重的是一种有序的规律,所以在每个程序开始之前,我们只要能找到一个使程序循序递进的规律;并且在整个过程都在用此规律进行传递,但是递归算法也有很大的缺点,会造成内存空间不足,从而形成内存溢出;所以针对这种缺点,就会引入“规律约束”,在每一次算法的的开始之前,先对算法进行一个规律约束,而这种约束可以理解为一个“归期”;即到这个归期不得已而为之……


eg:1 计算1+2+3+4+……+100的值。

function fn(n){
if(n==1)return 1;       //归期
return n+fn(n-1);       //规律
}
console.log(fn(100));


eg:2 计算n 和 1/n!的阶乘。

//1. n!
function fn(n){
if(n==1)return 1;         //归期
return n*fn(n-1);          //规律
}
console.log(fn(5));

//2. 1/n!
function fn(n){
if(n==1)return 1;         //归期
return 1/n*fn(n-1);         //规律
}
console.log(fn(5));


 eg:3 斐波拉契数列(求第n个数的数值)  

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987……
function fn(n){
if(n==1||n=2)return 1;        //归期
return fn(n-1)+fn(n-2);         //规律
}
console.log(fn(8));


eg:4 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数求/1+1/3+...+1/n
function fn(n){
if(n%2==0){
if(n<=2)return 1/2;       //归期
return 1/n+fn(n-2);       //规律
}
if(n%2!=0){
if(n==1)return 1;         //归期
return 1/n+fn(n-2);
}
}
console.log(fn(4));

eg:5 求1!+1/2!+1/3!+...+1/n!(递归与循环的结合)

function fn(n) {
    if (n == 1) return 1;       //归期
    return 1 / n * fn(n - 1);   //规律
}
console.log(fn(5));


function fn1(n) {
   var sum = 0;
   for (i = 1; i <= n; i++) {
      sum += fn(i);
    }
    return sum;
}
console.log(fn1(5))



站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/5043

关闭

浅谈javascript中的递归和闭包

递归和闭包作为js中很重要的一环,几乎在前端的面试中都会涉及,特别闭包。今天前端组的组长冷不丁的问了我一下,粗略的回答了一下,感觉不太满足,于是重新学习了一下,写下本篇。

原生js实现树级递归,通过js生成tree树形菜单(递归算法)

JavaScript生成树形菜单需求:首先这是一个数据集—js的类型,我们需要把生成一个tree形式的对象 : id,与pid之间的对应关系,当pid不存在,或pid:0的时候,这一项,应该为树的顶端,那么我们需要去重新建一次索引。

Js中的递归

递归函数是在一个函数通过名字调用自身的情况下构成的,这种写法在函数有名字,而且名字以后也不会变的情况下是没有问题的。但是函数的执行与函数名factorial紧紧耦合在了一起

JS递归及二叉搜索树的移除节点

递归含义:在某时某刻某个条件下调用包含自己的函数;注意点:⑴递归过程中一定要加限制条件,要不然会陷入死循环:递归有个过程,不是一步到位的,这一点尤其重要

递归思想与实战

递归算法对于一个程序员应该算是最经典的算法之一,而且它越想越乱,很多复杂算法的实现也都用到了递归,例如深度优先搜索,二叉树遍历等。面试中常常会问递归相关的内容(深拷贝,对象格式化,数组拍平,走台阶问题等)

js递归函数——函数体内调用本函数的方式

在js中通过如果一个函数直接或间接调用函数本身,则该函数称为递归函数。

js递归实现方式

递归函数就是在函数体内调用本函数;递归函数的使用要注意函数终止条件避免死循环;递归实现形式:1.声明一个具名函数,通过函数名调用,2. 使用arguments.callee代替函数名

Js递归

传统的递归思想:自已调用自已,但是调用栈里面的执行上下文会越来越多,容易暴栈。采用尾递归可以规避这个问题:每次入栈出栈再入栈

JavaScript实现无限级递归树

最近遇到一个需求,平时被后台惯着直接返回了树形结构给到前端,前端对这种嵌套类型的数据(如地区的级联或菜单的树形结构)省掉了一层处理。换了个后台开发返回了扁平化的数组数据给到前端自己去处理如下data。突然有点慌......

Vue 和递归组件

有人说递归很难理解,也有人不这么认为。递归函数简单的定义是:一个自调用函数,这意味着它将在执行的某个时刻调用自己。从理论上讲,递归是一种需要两个属性的行为:

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!