基于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动态加载以及确定加载完成的代码
Jul 31 Javascript
jQuery 删除/替换DOM元素的几种方式
May 20 Javascript
在JavaScript中重写jQuery对象的方法实例教程
Aug 25 Javascript
js实现简单的可切换选项卡效果
Apr 10 Javascript
js控制台输出的方法(详解)
Nov 26 Javascript
vue+vux实现移动端文件上传样式
Jul 28 Javascript
vue渲染时闪烁{{}}的问题及解决方法
Mar 28 Javascript
如何理解Vue的v-model指令的使用方法
Jul 19 Javascript
JavaScript禁用右键单击优缺点分析
Jan 20 Javascript
小程序如何支持使用 async/await详解
Sep 12 Javascript
使用Layui搭建后台管理界面的操作方法
Sep 20 Javascript
原生JS实现九宫格抽奖
Sep 13 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
纯php打造的tab选项卡效果代码(不用js)
2010/12/29 PHP
比file_get_contents稳定的curl_get_contents分享
2012/01/11 PHP
PHP中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
基于Laravel 多个中间件的执行顺序详解
2019/10/21 PHP
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
Zero Clipboard js+swf实现的复制功能使用方法
2010/03/07 Javascript
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
基于JQuery实现的类似购物商城的购物车
2011/12/06 Javascript
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
2013/12/12 Javascript
javascript从image转换为base64位编码的String
2014/07/29 Javascript
Javascript核心读书有感之表达式和运算符
2015/02/11 Javascript
原生js实现图片层叠轮播切换效果
2016/02/02 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
2016/06/15 Javascript
jQuery轻松实现无缝轮播效果
2017/03/22 jQuery
js实现下拉框效果(select)
2017/03/28 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
JavaScript实现alert弹框效果
2020/11/19 Javascript
react中hook介绍以及使用教程
2020/12/11 Javascript
Python爬虫模拟登录带验证码网站
2016/01/22 Python
利用ctypes提高Python的执行速度
2016/09/09 Python
遗传算法之Python实现代码
2017/10/10 Python
ubuntu中配置pyqt4环境教程
2017/12/27 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
2018/03/13 Python
Python理解递归的方法总结
2019/01/28 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
Python代码中如何读取键盘录入的值
2020/05/27 Python
Python第三方包PrettyTable安装及用法解析
2020/07/08 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
Python多分支if语句的使用
2020/09/03 Python
迪卡侬比利时官网:Decathlon比利时
2019/12/28 全球购物
思想品德自我评价
2014/02/04 职场文书
村主任当选感言
2015/08/01 职场文书
决心书格式及范文
2019/06/24 职场文书