基于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中toFixed()方法引起的问题如何解决
Nov 20 Javascript
JS 毫秒转时间示例代码
Sep 22 Javascript
JS实现在页面随时自定义背景颜色的方法
Feb 27 Javascript
用jQuery的AJax实现异步访问、异步加载
Nov 02 Javascript
值得学习的bootstrap fileinput文件上传工具
Nov 08 Javascript
jQuery实现隔行变色的方法分析(对比原生JS)
Nov 18 Javascript
js微信扫描二维码登录网站技术原理
Dec 01 Javascript
js实现日历的简单算法
Jan 24 Javascript
JavaScript学习笔记之惰性函数示例详解
Aug 27 Javascript
使用vue-router完成简单导航功能【推荐】
Jun 28 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
Sep 01 Javascript
Typescript类型系统FLOW静态检查基本规范
May 25 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
绿山咖啡和蓝山咖啡
2021/03/04 新手入门
一个可查询所有表的“通用”查询分页类
2006/10/09 PHP
桌面中心(二)数据库写入
2006/10/09 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
PHP解决高并发的优化方案实例
2020/12/10 PHP
兼容多浏览器的字幕特效Marquee的通用js类
2008/07/20 Javascript
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
JavaScript简单下拉菜单实例代码
2015/09/07 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
2016/01/04 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
2016/04/06 Javascript
node.js文件上传处理示例
2016/10/27 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
2017/09/05 Javascript
JavaScript轮播停留效果的实现思路
2018/05/24 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
js实现无缝滚动双图切换效果
2019/07/09 Javascript
Vue 修改网站图标的方法
2020/12/31 Vue.js
Python sqlite3事务处理方法实例分析
2017/06/19 Python
Python字符编码与函数的基本使用方法
2017/09/30 Python
Python操作qml对象过程详解
2019/09/26 Python
python科学计算之narray对象用法
2019/11/25 Python
python 类之间的参数传递方式
2019/12/20 Python
python数据分析工具之 matplotlib详解
2020/04/09 Python
Python request中文乱码问题解决方案
2020/09/17 Python
俄语地区最大的中国商品在线购物网站之一:Umka Mall
2019/11/03 全球购物
Why do we need Unit test
2013/01/03 面试题
个人自我鉴定范文
2013/10/04 职场文书
贷款承诺书范文
2014/05/19 职场文书
2014年教务工作总结
2014/12/03 职场文书
2014预防青少年违法犯罪工作总结
2014/12/10 职场文书
2015年测量员工作总结
2015/05/23 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
pytorch中的model=model.to(device)使用说明
2021/05/24 Python
Python集合的基础操作
2021/11/01 Python
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫