基于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获取客户端IP地址、MAC和主机名的7个方法汇总
Jul 21 Javascript
浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用
Nov 23 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
Dec 20 Javascript
jQuery中show与hide方法用法示例
Sep 16 Javascript
require、backbone等重构手机图片查看器
Nov 17 Javascript
js原生之焦点图转换加定时器实例
Dec 12 Javascript
VuePress 静态网站生成方法步骤
Feb 14 Javascript
Vue2.0+Vux搭建一个完整的移动webApp项目的示例
Mar 19 Javascript
详解auto-vue-file:一个自动创建vue组件的包
Apr 26 Javascript
koa2的中间件功能及应用示例
Mar 05 Javascript
vuecli项目构建SSR服务端渲染的实现
Oct 30 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
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的ob_start() 控制您的浏览器cache
2009/08/03 PHP
php array_map()数组函数使用说明
2011/07/12 PHP
php中判断文件空目录是否有读写权限的函数代码
2012/08/07 PHP
PHP连接SQLServer2005方法及代码
2013/12/26 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
php插入mysql数据返回id的方法
2018/05/31 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
JQuery 无废话系列教程(二) jquery实战篇上
2009/06/23 Javascript
Js sort排序使用方法
2011/10/17 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
2013/04/28 Javascript
基于jquery编写的横向自适应幻灯片切换特效的实例代码
2013/08/06 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
2019/09/05 Javascript
element-ui中按需引入的实现
2019/12/25 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
2020/07/26 Javascript
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
Python实现基于HTTP文件传输实例
2014/11/08 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
python爬取代理ip的示例
2020/12/18 Python
基于Modernizr 让网站进行优雅降级的分析
2013/04/21 HTML / CSS
澳大利亚著名的纺织品品牌:Canningvale
2020/05/05 全球购物
校园之星获奖感言
2014/01/29 职场文书
自动化毕业生专业自荐书范文
2014/02/04 职场文书
JavaScript 实现页面滚动动画
2021/04/24 Javascript
java解析XML详解
2021/07/09 Java/Android
vue使用element-ui按需引入
2022/05/20 Vue.js