基于JS递归函数细化认识及实用实例(推荐)


Posted in Javascript onAugust 07, 2017

程序调用自身的编程技巧称为递归( recursion)。

一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。用递归思想写出的程序往往十分简洁易懂。

一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

注意:

(1) 递归就是在过程或函数里调用自身;

(2) 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口,否则将无限进行下去(死锁)。

递归算法一般用于解决三类问题:

(1)数据的定义是按递归定义的。(Fibonacci函数)

(2)问题解法按递归算法实现。(回溯)

(3)数据的结构形式是按递归定义的。(树的遍历,图的搜索)

递归的缺点:

递归算法解题的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。

递归函数趣味实例:

1、 古典问题——有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第三年每个月的兔子总数为多少?(提示:兔子的规律为数列1,1,2,3,5,8,13,21....)

class Program
 {
  static void Main(string[] args)
  {
   Program p = new Program();
   Console.WriteLine(p.tuzi(7));
  }
  public int tuzi(int n) 
  {
   if (n == 1 || n == 2)
   {
    return 1;
   }
   else 
   {
    return tuzi(n - 1) + tuzi(n - 2);
   }
  }
 }

2、 趣味问题——年龄。有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?用递归算法实现。

class Program
 {
  static void Main(string[] args)
  {
   Program p = new Program();
   
   Console.WriteLine( p.age(5));
  }
  /// <summary>
  /// 递归法求岁数
  /// </summary>
  /// <param name="n">有几个人</param>
  /// <returns></returns>
  int age(int n)
  {
   int c;
   if(n==1)
    return 10;
  
   else
   {
    c = age(n-1)+2;
    return c;
   } 
  }

3、 趣味问题——猴子吃桃。海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
代码:

class Program
 {
  static void Main(string[] args)
  {
   
   Program p = new Program();
   
   Console.WriteLine( p.PeachNumber(5));
   
  }
  /// <summary>
  /// 递归法求桃子数
  /// </summary>
  /// <param name="n"></param>
  /// <returns></returns>
  int PeachNumber(int n) 
  {
   if (n == 1)
   {
    //最后一个是至少是六个
    return 6;
   }
   else 
   {
    return (PeachNumber(n - 1) + 1) * 5;
   }
  }

以上这篇基于JS递归函数细化认识及实用实例(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js实现点击添加一个input节点
Dec 05 Javascript
Bootstrap+jfinal实现省市级联下拉菜单
May 30 Javascript
js实现楼层效果的简单实例
Jul 15 Javascript
JQuery 动态生成Table表格实例代码
Dec 02 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
Jan 29 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
Feb 19 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
Apr 07 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
Apr 21 Javascript
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
Apr 25 Javascript
Vee-Validate的使用方法详解
Sep 22 Javascript
JS轮播图的实现方法2
Aug 25 Javascript
vue如何实现关闭对话框后刷新列表
Apr 08 Vue.js
react native实现往服务器上传网络图片的实例
Aug 07 #Javascript
使用Node.js实现简易MVC框架的方法
Aug 07 #Javascript
ES6新增的math,Number方法
Aug 06 #Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
Aug 06 #Javascript
JS解析url查询参数的简单代码
Aug 06 #Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
Aug 06 #Javascript
JS中定位 position 的使用实例代码
Aug 06 #Javascript
You might like
全国FM电台频率大全 - 18 湖南省
2020/03/11 无线电
提取HTML标签
2006/10/09 PHP
php中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
(function($){...})(jQuery)的意思
2010/07/22 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
jquery中加载图片自适应大小主要实现代码
2013/08/23 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
2015/04/12 Javascript
浅谈jquery中delegate()与live()
2015/06/22 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
Bootstrap下拉菜单效果实例代码分享
2016/06/30 Javascript
Bootstrap实现水平排列的表单
2016/07/04 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
js+canvas实现简单扫雷小游戏
2021/01/22 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
[59:07]海涛为你详解DOTA2新版本“贤哲秘契”
2014/11/22 DOTA
[40:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs TNC
2018/04/01 DOTA
[01:51]历届DOTA2国际邀请赛举办地回顾 TI9落地上海
2018/08/26 DOTA
[33:28]完美世界DOTA2联赛PWL S3 PXG vs GXR 第三场 12.19
2020/12/24 DOTA
怎样使用Python脚本日志功能
2016/08/14 Python
python实现简单日期工具类
2019/04/24 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
英国领先的运动营养品牌:Protein Dynamix
2018/01/02 全球购物
墨西哥皇宫度假村预订:Palace Resorts
2018/06/16 全球购物
澳大利亚婴儿礼品公司:The Baby Gift Company
2018/11/04 全球购物
时尚圣经:The Fashion Bible
2019/03/03 全球购物
四年的个人工作自我评价
2013/12/10 职场文书
成功的餐厅经营创业计划书
2014/01/15 职场文书
房地产活动策划方案
2014/05/14 职场文书
总经理助理岗位职责范本
2014/07/20 职场文书
2014派出所所长群众路线对照检查材料思想汇报
2014/09/18 职场文书
入党积极分子考察意见
2015/06/02 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
分析设计模式之模板方法Java实现
2021/06/23 Java/Android
电脑开机弹出documents文件夹怎么回事?弹出documents文件夹解决方法
2022/04/08 数码科技