基于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处理DOM元素事件实现代码
May 23 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
Jul 27 Javascript
有关jQuery中parent()和siblings()的小问题
Jun 01 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
Oct 16 Javascript
jQuery实现手势解锁密码特效
Aug 14 jQuery
详解基于Vue+Koa的pm2配置
Oct 24 Javascript
用Webpack构建Vue项目的实践
Nov 07 Javascript
微信小程序实现留言功能
Oct 31 Javascript
js前端面试之同步与异步问题详解
Apr 03 Javascript
vue路由插件之vue-route
Jun 13 Javascript
JavaScript键盘事件响应顺序详解
Sep 30 Javascript
基于ajax及jQuery实现局部刷新过程解析
Sep 12 jQuery
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 is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
PHP使用pear自带的mail类库发邮件的方法
2015/07/08 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
php实现的mongoDB单例模式操作类
2018/01/20 PHP
php常用字符串查找函数strstr()与strpos()实例分析
2019/06/21 PHP
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
js调试系列 断点与动态调试[基础篇]
2014/06/18 Javascript
jquery实现(textarea)placeholder自动换行
2016/12/22 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
深入浅析ES6 Class 中的 super 关键字
2017/10/20 Javascript
nodejs express配置自签名https服务器的方法
2018/05/22 NodeJs
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
jQuery实现鼠标移入显示蒙版效果
2020/01/11 jQuery
vuex存取值和映射函数使用说明
2020/07/24 Javascript
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
python操作gmail实例
2015/01/14 Python
Python编码爬坑指南(必看)
2016/06/10 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
python分析作业提交情况
2017/11/22 Python
Python解决N阶台阶走法问题的方法分析
2017/12/28 Python
python自动12306抢票软件实现代码
2018/02/24 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
2019/04/27 Python
Python将主机名转换为IP地址的方法
2019/08/14 Python
Pycharm 安装 idea VIM插件的图文教程详解
2020/02/21 Python
利用CSS3把图片变成灰色模式的实例代码
2016/09/06 HTML / CSS
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
巴西图书和电子产品购物网站:Saraiva
2017/06/07 全球购物
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
计算机专业应届毕业生自荐信
2013/09/26 职场文书
农民入党思想汇报
2014/01/03 职场文书
业务员简历自我评价
2014/03/06 职场文书
2015年业务工作总结范文
2015/04/10 职场文书
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android
sql查询语句之平均分、最高最低分及排序语句
2022/05/30 MySQL