基于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代码
Nov 10 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
Mar 31 Javascript
JavaScript使用addEventListener添加事件监听用法实例
Jun 01 Javascript
纯css实现窗户玻璃雨滴逼真效果
Aug 23 Javascript
bootstrap datepicker限定可选时间范围实现方法
Sep 28 Javascript
js编写简单的聊天室功能
Aug 17 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
Nov 17 Javascript
详解Element 指令clickoutside源码分析
Feb 15 Javascript
详解Vue组件之间通信的七种方式
Apr 14 Javascript
vue实现在线翻译功能
Sep 27 Javascript
Jquery滑动门/tab切换实现方法完整示例
Jun 05 jQuery
vue实现表格合并功能
Dec 01 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
php ctype函数中文翻译和示例
2014/03/21 PHP
php正则修正符用法实例详解
2016/12/29 PHP
JQuery index()方法使用代码
2010/06/02 Javascript
Js获取事件对象代码
2010/08/05 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
2014/06/07 Javascript
jQuery中hasClass()方法用法实例
2015/01/06 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
2015/03/18 Javascript
纯javascript代码实现计算器功能(三种方法)
2015/09/07 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
2015/12/10 Javascript
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
js实现省市级联效果分享
2017/08/10 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
jQuery中元素选择器(element)简单用法示例
2018/05/14 jQuery
vue动态循环出的多个select出现过的变为disabled(实例代码)
2019/11/10 Javascript
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
Python常用随机数与随机字符串方法实例
2015/04/09 Python
简单实现python画圆功能
2018/01/25 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
使用anaconda安装pytorch的实现步骤
2020/09/03 Python
使用CSS禁止textarea调整大小功能的方法
2015/03/13 HTML / CSS
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
不开辟用于交换数据的临时空间,如何完成字符串的逆序
2012/12/02 面试题
应届护士求职信范文
2014/01/26 职场文书
企业法人代表任命书
2014/06/06 职场文书
委托书的格式
2014/08/01 职场文书
2014镇副书记群众路线专题民主生活会思想汇报
2014/09/23 职场文书
瘦西湖导游词
2015/02/03 职场文书
幼儿园教师自荐书
2015/03/06 职场文书
学生通报表扬范文
2015/05/04 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js
Go中使用gjson来操作JSON数据的实现
2022/08/14 Golang