基于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 相关文章推荐
jQuery UI-Draggable 参数集合
Jan 10 Javascript
用jquery.sortElements实现table排序
May 04 Javascript
js实现超酷的照片墙展示效果图附源码下载
Oct 08 Javascript
浅析BootStrap模态框的使用(经典)
Apr 29 Javascript
利用Angularjs实现幻灯片效果
Sep 07 Javascript
jquery判断页面网址是否有效的两种方法
Dec 11 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
Mar 23 Javascript
Three.js开发实现3D地图的实践过程总结
Nov 20 Javascript
vue中简单弹框dialog的实现方法
Feb 26 Javascript
JavaScript ES2019中的8个新特性详解
Feb 20 Javascript
JS实现点餐自动选择框(案例分析)
Dec 10 Javascript
JavaScript实现贪吃蛇游戏
Jun 16 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小偷的核心程序
2007/04/09 PHP
PHP提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
PHP函数之日期时间函数date()使用详解
2013/09/09 PHP
php压缩和解压缩字符串的方法
2015/03/14 PHP
php cli配置文件问题分析
2015/10/15 PHP
Yii2验证器(Validator)用法分析
2016/07/23 PHP
微信公众号开发客服接口实例代码
2016/10/21 PHP
扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁
2011/12/08 Javascript
六款帮助你实现惊艳视差滚动效果的jQuery插件
2012/09/14 Javascript
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
2017/02/07 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
angular directive的简单使用总结
2017/05/24 Javascript
vue移动UI框架滑动加载数据的方法
2018/03/12 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
[00:37]2016完美“圣”典风云人物:rOtk宣传片
2016/12/09 DOTA
Python的time模块中的常用方法整理
2015/06/18 Python
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
Python基础语法(Python基础知识点)
2016/02/28 Python
Python+微信接口实现运维报警
2016/08/27 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
2020/01/19 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
捷克移动配件网上商店:ProMobily.cz
2019/03/15 全球购物
超市中秋节活动方案
2014/02/12 职场文书
政治表现评语
2014/05/04 职场文书
雷锋式好少年事迹材料
2014/08/17 职场文书
简单介绍Python的第三方库yaml
2021/06/18 Python
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript