基于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中判断一个元素下面是否有内容或者有某个标签的判断代码
Feb 02 Javascript
浅析Javascript使用include/require
Nov 13 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
Feb 11 Javascript
javascript数据结构与算法之检索算法
Apr 04 Javascript
javascript中offset、client、scroll的属性总结
Aug 13 Javascript
微信小程序 九宫格实例代码
Jan 21 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
Feb 16 Javascript
微信小程序商城项目之淘宝分类入口(2)
Apr 17 Javascript
js,jq,css多方面实现简易下拉菜单功能
May 13 Javascript
Vue+axios实现统一接口管理的方法
Jul 23 Javascript
微信网页授权并获取用户信息的方法
Jul 30 Javascript
浅谈React碰到v-if
Nov 04 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内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
javascript Select标记中options操作方法集合
2008/10/22 Javascript
动态为事件添加js代码示例
2009/02/15 Javascript
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
javascript校验价格合法性实例(必须输入2位小数)
2014/05/05 Javascript
Immutable 在 JavaScript 中的应用
2016/05/02 Javascript
Angularjs 依赖压缩及自定义过滤器写法
2017/02/04 Javascript
javascript 中null和undefined区分和比较
2017/04/19 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
在angularJs中进行数据遍历的2种方法
2018/10/08 Javascript
JavaScript JMap类定义与使用方法示例
2019/01/22 Javascript
js键盘事件实现人物的行走
2020/01/17 Javascript
JavaScript单线程和任务队列原理解析
2020/02/04 Javascript
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
Python批量重命名同一文件夹下文件的方法
2015/05/25 Python
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
总结Python编程中函数的使用要点
2016/03/20 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
使用python搭建服务器并实现Android端与之通信的方法
2019/06/28 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
html5中如何将图片的绝对路径转换成文件对象
2018/01/11 HTML / CSS
canvas环形倒计时组件的示例代码
2018/06/14 HTML / CSS
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
夜大毕业自我鉴定
2013/10/11 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
银行办公室岗位职责
2014/03/10 职场文书
温馨提示标语
2014/06/26 职场文书
2015年党总支工作总结
2015/05/25 职场文书
初一军训感言
2015/08/01 职场文书
感谢师恩主题班会
2015/08/17 职场文书
2016年“12.3”国际残疾人日活动总结
2016/04/01 职场文书
创业计划书之养殖业
2019/10/11 职场文书
「地球外少年少女」BD发售宣传CM公开
2022/03/21 日漫