javascript中递归函数的经典案例

什么是递归函数?

关于递归的概念,我们都不陌生。简单的来说递归就是一个函数直接或间接地调用自身,是为直接或间接递归。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。用递归需要注意以下两点:
 (1) 递归就是在过程或函数里调用自身。
 (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

简洁的来说:一个函数可以调用其他函数。如果函数在内部调用他自己本身 ,那么这个函数就叫递归函数

递归函数的作用:

下面举个例子:计算1~10的累加和1+2+3…+10.

 计算1~10的累加和。分析一到十的累加和===>1、add(10)为一到十的累加和;add(10)=10+9+8+7+6+5+4+3+2+1;那我们可不可以写成这样:add(10)=10+add(9);==>同理:  add(9)=9+add(8);add(8)=8+add(7);.......add(3)=add(2)+3;add(2)=add(1)+2;add(1)=add(0)+1; 由此我们可以得出:add(n)=add(n-1)+n;    add(0)为多少呢?是不是等于0,依次我们可以求的add(1)=1==>即求的add(1)、add(2)、add(3)....add(10)

声明函数如下:

 //申明一个add函数function add(n){// 当n==1时写下其边界值为1if(n===1){return 1;}else{                  //条件不为1时,调用自身函数return add(n-1)+n;      //其关系条件为:add(n)=add(n-1)+n;}}var result = add(10);  // 将add为10的值赋值给result;console.log(result);    //控制台输出result;

输出结果为:

55

从上面两中方法的对比可以看出,递归函数的作用和循环的方法效果一样,即递归函数本质上是一个方法的循环调用, 注意:有可能会出现死循环。因此,使用递归函数的时候,一定要定义递归的边界(即什么时候退出循环)。

递归函数的另一个案例是斐波纳契数列

斐波纳契数列:1、1、2、3、5、8、13。。。(该数列中,第三个数开始:数值=前面第一个数字+前面第二个数字)即,n=(n-2)+(n+1)

//综上所述、我们发现以下规律:
fibonacci(n)=fibonacci(n-1)+fibonacci(n-2);

即函数申明如下:

//声明斐波纳契数列函数
function fibonacci(n){//当n==1时值if(n==1){return 1;}//当n==2时值if(n==2){return 1;}return fibonacci(n-1)+fibonacci(n-2);}//返回函数为7赋值给result;var result = fibonacci(7);//控制台输出console.log(result);

输出结果为:

13

以上两个案例是递归的经典案例。

来源于知乎?
递归的三大要素
第一要素:明确你这个函数想要干什么
对于递归,我觉得很重要的一个事就是,这个函数的功能是什么,他要完成什么样的一件事,而这个,是完全由你自己来定义的。也就是说,我们先不管函数里面的代码什么,而是要先明白,你这个函数是要用来干什么。
第二要素:寻找递归结束条件所谓递归,就是会在函数内部代码中,调用这个函数本身,所以,我们必须要找出递归的结束条件,不然的话,会一直调用自己,进入无底洞。也就是说,我们需要找出当参数为啥时,递归结束,之后直接把结果返回,请注意,这个时候我们必须能根据这个参数的值,能够直接知道函数的结果是什么。
第三要素:找出函数的等价关系式第三要素就是,我们要不断缩小参数的范围,缩小之后,我们可以通过一些辅助的变量或者操作,使原函数的结果不变。例如,f(n) 这个范围比较大,我们可以让 f(n) = n * f(n-1)。这样,范围就由 n 变成了 n-1 了,范围变小了,并且为了原函数f(n) 不变,我们需要让 f(n-1) 乘以 n。说白了,就是要找到原函数的一个等价关系式,f(n) 的等价关系式为 n * f(n-1),即f(n) = n * f(n-1)。

递归的用途

递归一般用于解决三类问题:
  (1)问题解法按递归实现。(回溯)
  (2)数据的定义是按递归定义的。(Fibonacci函数,n的阶乘)
  (3)数据的结构形式是按递归定义的。(二叉树的遍历,图的搜索)

递归的缺点

递归的思想与循环有着类似的思想,但我们很少用,因为其:运行效率较低可能出现死循环。 因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。

结语

即我们是不是对递归函数有了一定的理解,那我们如果想要了解更多的前端知识可以打开链接,进入我们的快乐学习之旅!
链接: 前端学习网站.

js中递归函数的经典案例相关推荐

  1. Python编程经典案例【考题】自由落体运动球的运动轨迹

    本文和你一起探索Python编程经典案例,让你沉浸式学习Python.助你期末考试拿高分,拿到大厂的心仪offer.你可以先自己拿着题目去思考有多少种不同的解题方法,然后再对照本文解题方法进行比较.有 ...

  2. js中实现深拷贝的4种方法

    js中深拷贝的方法 原生js中递归函数拷贝 将数据中所有的数据拷贝下来,对拷贝之后的数据进行修改不会影响到原数据 ,两个对象或数组不共享一块内存 <script>let obj={abc: ...

  3. Python编程经典案例【考题】求某个范围内能被3整除且能被5整除的所有数,及这些数的和

    本文和你一起探索Python编程经典案例,让你沉浸式学习Python.你可以拿着题目先思考,然后再对照本文解题方法进行比较.有不同的见解欢迎到公众号中跟我一起探讨.    文章目录 一.经典案例[考题 ...

  4. Python编程经典案例【考题】排列组合

    本文和你一起探索Python编程经典案例,让你沉浸式学习Python.你可以拿着题目先思考,然后再对照本文解题方法进行比较.有不同的见解欢迎到公众号中跟我一起探讨. 文章目录 一.经典案例[考题] 二 ...

  5. 让你彻底弄懂Python编程经典案例【考题】之反转一个值

    学习Python有很多不同的方法,可以看视频.看博客.看公众号等.但光说不练,很难有快速的提升.最好能动手去处理实际问题,这样才能把学到的知识应用得更熟练.    本文和你一起来探索Python编程的 ...

  6. Python编程经典案例【考题】公司奖金发放

    本文和你一起探索Python编程经典案例,让你沉浸式学习Python.你可以拿着题目先思考,然后再对照本文解题方法进行比较.有不同的见解欢迎到公众号中跟我一起探讨.    文章目录 一.经典案例[考题 ...

  7. html中js计算百钱百鸡,JS经典案例之百钱百鸡

    今天我们来回顾一下JS的经典案例之百钱百鸡 题目 公鸡5元钱一只,母鸡3元钱一只,小鸡3只一元钱,用100元钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100元钱 ...

  8. python递归函数例子_Python递归函数经典案例-汉诺塔问题

    汉诺塔 汉诺塔问题是递归算法学习的一个经典案例,首先来看下汉诺塔问题的相关描述: 汉诺塔问题起源于一个古老的印度传说,大梵天创世时制作了三根金刚石石柱,在第一根柱子上从上往下从小到大摞着64片金盘,婆 ...

  9. 【JS中循环嵌套常见的六大经典例题+六大图形题,你知道哪几个?】

    首先,了解一下循环嵌套的特点:外层循环转一次,内层循环转一圈. 在上一篇随笔中详细介绍了JS中的分支结构和循环结构,我们来简单的回顾一下For循环结构: 1.for循环有三个表达式,分别为: ①定义循 ...

最新文章

  1. linux 进程数量限制,LINUX下每进程限制线程数量
  2. 定时器的资源互斥处理
  3. 数据结构二分法算法的步骤_数据结构与算法之算法思想:二分法搜索实现(python)...
  4. 【Python基础】使用Matplotlib可视化数据的5个强大技巧
  5. adb安装apk报错Failure [INSTALL_FAILED_INVALID_URI]
  6. OSPF-5类LSA和4类LSA
  7. Java 函数引用 替代方案
  8. 华为ap配置_13、了解下POE交换机以及AP供电几种方式
  9. 千亿级数量下日志分析系统的技术架构选型
  10. java中jdk api等概念的解释
  11. 【2018盘点VR一体机那些事】手机VR眼镜和VR一体机有什么区别?AR,VR眼镜和VR一体机哪个好?
  12. 通过docker安装nexus3
  13. lmdb数据库的读取与转换(一) —— 基本操作
  14. 程序员面试必看32道经典逻辑推理题
  15. 网易云信IMweb版集成实现(PHP直接上码)
  16. 《SQL进阶教程》学习
  17. 安装opencv时出现PEP517问题解决
  18. 【随机算法梗概】遗传算法通俗的讲解案例~~
  19. android友盟微信分享到朋友圈,2020年友盟分享到微信朋友圈
  20. 2021-2027全球与中国全闪存存储市场现状及未来发展趋势

热门文章

  1. 小爱情、小幸福、一辈子
  2. 小学生计算机管理员寄语,小学生寄语简短
  3. 好程序员web培训简述web前端开发工具有哪些
  4. 电脑书籍下载网站集锦
  5. nginx参数fastcgi
  6. 正则匹配字符串中汉字及中文标点符号
  7. 计算机专业口号霸气,计算机气势口号
  8. 基于QT实现的智能饮料工控管理系统
  9. ps入门第20天_ps批处理_ps动作的编辑与创建 案例:千图成像
  10. 计算机应用刷分方法,深度学习分类比赛刷分技巧