基于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面向对象设计用{}好还是function(){}好(构造函数)
Oct 23 Javascript
开源的javascript项目Kissy介绍
Nov 28 Javascript
javascript中var的重要性分析
Feb 11 Javascript
JS获取表格内指定单元格html内容的方法
Mar 31 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
Dec 05 Javascript
js实现倒计时关键代码
May 05 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
Aug 11 Javascript
详解JS中的柯里化(currying)
Aug 17 Javascript
angular2 ng2 @input和@output理解及示例
Oct 10 Javascript
详解vue如何使用rules对表单字段进行校验
Oct 17 Javascript
node将geojson转shp返回给前端的实现方法
May 29 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
Feb 15 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 strcmp使用说明
2010/04/22 PHP
CentOS 上搭建 PHP7 开发测试环境
2017/02/26 PHP
laravel 出现command not found问题的解决方案
2019/10/23 PHP
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
js与C#进行时间戳转换
2014/11/14 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
Javascript中神奇的this
2016/01/20 Javascript
JavaScript实现简洁的俄罗斯方块完整实例
2016/03/01 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
2016/04/26 Javascript
全面解析Bootstrap中Carousel轮播的使用方法
2016/06/13 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
vue实现多个元素或多个组件之间动画效果
2018/09/25 Javascript
vue用BMap百度地图实现即时搜索功能
2019/09/26 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
介绍Python中的__future__模块
2015/04/27 Python
python实现图书管理系统
2018/03/12 Python
python对html过滤处理的方法
2018/10/21 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
用python查找统一局域网下ip对应的mac地址
2021/01/13 Python
Python Selenium异常处理的实例分析
2021/02/28 Python
一款基于css3的动画按钮代码教程
2014/11/23 HTML / CSS
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
html5超简单的localStorage实现记住密码的功能实现
2017/09/07 HTML / CSS
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
英国电子专家:maplin
2019/09/04 全球购物
DELPHI面试题研发笔试试卷
2015/11/08 面试题
给下属加薪申请报告
2015/05/15 职场文书
电视新闻稿
2015/07/17 职场文书
《认识钟表》教学反思
2016/02/16 职场文书
Java面试题冲刺第十六天--消息队列
2021/08/07 面试题