基于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 相关文章推荐
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
Feb 09 Javascript
jquery简单实现外部链接用新窗口打开的方法
May 30 Javascript
JQuery遍历DOM节点的方法
Jun 11 Javascript
跟我学习javascript的隐式强制转换
Nov 16 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
Jun 22 Javascript
jQuery事件绑定用法详解
Sep 08 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
Jun 12 Javascript
react系列从零开始_简单谈谈react
Jul 06 Javascript
Vue中使用vux配置代码详解
Sep 16 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
Mar 07 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
Apr 10 Javascript
如何用原生js写一个弹窗消息提醒插件
May 24 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获取表单所有复选框的值的方法
2014/08/28 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
2017/07/03 PHP
jquery中的on方法使用介绍
2013/12/29 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
js实现鼠标移到链接文字弹出一个提示层的方法
2015/05/11 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
hovertree插件实现二级树形菜单(简单实用)
2016/12/28 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
JS实现评价的星星功能
2017/08/20 Javascript
微信小程序实现的贪吃蛇游戏【附源码下载】
2018/01/03 Javascript
Vue2.0生命周期的理解
2018/08/20 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
JavaScript鼠标悬停事件用法解析
2020/05/15 Javascript
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
Python中几种导入模块的方式总结
2017/04/27 Python
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
Python提取特定时间段内数据的方法实例
2019/04/01 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
pyinstaller将含有多个py文件的python程序做成exe
2020/04/29 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
企业统计员岗位职责
2013/12/13 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
推荐信格式要求
2014/05/09 职场文书
医院安全生产月活动总结
2014/07/05 职场文书
初中生300字旷课检讨书
2014/11/19 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
企业催款函范本
2015/06/24 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书