基于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 相关文章推荐
jquery中表单 多选框的一种巧妙写法
Sep 06 Javascript
angular.bind使用心得
Oct 26 Javascript
javascript随机抽取0-100之间不重复的10个数
Feb 25 Javascript
详解Bootstrap插件
Apr 25 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
May 28 Javascript
AngularJS基础 ng-mouseleave 指令详解
Aug 02 Javascript
d3.js实现简单的网络拓扑图实例代码
Nov 06 Javascript
值得分享的JavaScript实现图片轮播组件
Nov 21 Javascript
仿淘宝JSsearch搜索下拉深度用法
Jan 15 Javascript
elementui的默认样式修改方法
Feb 23 Javascript
详解js跨域请求的两种方式,支持post请求
May 05 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
Feb 21 Javascript
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
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
ezSQL PHP数据库操作类库
2010/05/16 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
基于PHP实现微信小程序客服消息功能
2019/08/12 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
用JQUERY增删元素的代码
2012/02/14 Javascript
js实现字符串的16进制编码不加密
2014/04/25 Javascript
js实现的点击数量加一可操作数据库
2014/05/09 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
2017/03/10 Javascript
vuex学习之Actions的用法详解
2017/08/29 Javascript
javascript实现小型区块链功能
2019/04/03 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
PyQt5主窗口动态加载Widget实例代码
2018/02/07 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
Python2与Python3的区别实例总结
2019/04/17 Python
Python模拟FTP文件服务器的操作方法
2020/02/18 Python
Python3自动生成MySQL数据字典的markdown文本的实现
2020/05/07 Python
简述 Python 的类和对象
2020/08/21 Python
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
P/Invoke是什么
2015/07/31 面试题
预备党员表决心书
2014/03/11 职场文书
2015年党员自评材料
2014/12/17 职场文书
求职自我评价范文
2015/03/09 职场文书
买卖合同纠纷代理词
2015/05/25 职场文书
婚礼嘉宾致辞
2015/07/28 职场文书
如何利用Python实现一个论文降重工具
2021/07/09 Python
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers