程序调用自身的编程技巧称为递归( 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递归函数定义与用法实例分析
# PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
# JavaScript递归函数解“汉诺塔”算法代码解析
# JavaScript正则表达式校验与递归函数实际应用实例解析
# JS中递归函数
# javascript中递归函数用法注意点
# javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上
# js中递归函数的使用介绍
# javascript 用记忆函数快速计算递归函数
# javascript递归函数定义和用法示例分析
# 递归
# 每个月
# 他说
# 给大家
# 死锁
# 海中
# 子长
# 两岁
# 拿走了
# 都是
# 一只
# 第一个
# 遍历
# 只需
# 上有
# 希望能
# 这样做
# 这只
# 就可
# 多大
相关文章:
如何在服务器上三步完成建站并提升流量?
建站之星下载版如何获取与安装?
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何做静态网页,sublimetext3.0制作静态网页?
建站之星导航如何优化提升用户体验?
Python路径拼接规范_跨平台处理说明【指导】
网站制作壁纸教程视频,电脑壁纸网站?
代刷网站制作软件,别人代刷火车票靠谱吗?
html制作网站的步骤有哪些,iapp如何添加网页?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
建站上传速度慢?如何优化加速网站加载效率?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
建站OpenVZ教程与优化策略:配置指南与性能提升
香港服务器建站指南:免备案优势与SEO优化技巧全解析
如何通过PHP快速构建高效问答网站功能?
如何基于云服务器快速搭建网站及云盘系统?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何快速搭建高效可靠的建站解决方案?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
网站制作免费,什么网站能看正片电影?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
建站主机空间推荐 高性价比配置与快速部署方案解析
如何做网站制作流程,*游戏网站怎么搭建?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
建站org新手必看:2024最新搭建流程与模板选择技巧
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
如何选择PHP开源工具快速搭建网站?
如何续费美橙建站之星域名及服务?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
无锡营销型网站制作公司,无锡网选车牌流程?
建站之星如何防范黑客攻击与数据泄露?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
广德云建站网站建设方案与建站流程优化指南
香港服务器如何优化才能显著提升网站加载速度?
如何规划企业建站流程的关键步骤?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
如何快速搭建支持数据库操作的智能建站平台?
,柠檬视频怎样兑换vip?
如何选择服务器才能高效搭建专属网站?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
公司网站的制作公司,企业网站制作基本流程有哪些?
专业网站建设制作报价,网页设计制作要考什么证?
制作网站的公司有哪些,做一个公司网站要多少钱?
如何选择高性价比服务器搭建个人网站?
建站主机数据库如何配置才能提升网站性能?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
*请认真填写需求信息,我们会在24小时内与您取得联系。