当前位置: 首页 > news >正文

张家界建设网站的公司安溪住房和城乡建设网站

张家界建设网站的公司,安溪住房和城乡建设网站,宁波专业网站制作服务,哪个网站可以做图交易平台递归 在编程中,我们把函数直接或者间接调用自身的过程叫做递归。 递归处理问题的过程是:通常把一个大型的复杂问题,转变成一个与原问题类似的,规模更小的问题来进行求解。 递归的三大要素 函数的参数。在用递归解决问题时&…

递归

在编程中,我们把函数直接或者间接调用自身的过程叫做递归。

递归处理问题的过程是:通常把一个大型的复杂问题,转变成一个与原问题类似的,规模更小的问题来进行求解。

递归的三大要素

  1. 函数的参数。在用递归解决问题时,要合理地去设计函数的参数,达到当前问题与子问题之间的变化,可以通过参数进行准确地描述。
  2. 递推关系。要能够找到当前问题与子问题之间的联系,能够用子问题去描述当前问题的解。
  3. 递归出口(边界条件)。要找到问题的边界,避免出现无限递归的情况。每次我们在设计递归函数时,第一步就是先判断当前是否已经到达递归出口,若未到达则再继续递归。

偶数的递归定义

现在我们采用递归的方式来定义偶数:

  1. 0是一个偶数。
  2. 一个偶数与2的和是一个偶数。

这里我们在定义偶数时,就使用了偶数的这个概念。

证明10是偶数

现在我们需要使用刚才的定义来证明10是否为偶数。

因为10=8+2,根据第二条定义可以知道,一个偶数与2的和是一个偶数,现在我们只需要证明8是否是偶数即可得到结论。

我们现在用f(10)表示证明10是否为偶数的函数。

则整个的证明过程如下:

f(10) -> f(8) -> f(6) -> f(4) -> f(2) -> f(0),最终我们的问题变成证明0是否为偶数,而定义中已经给出0是偶数,所以我们可以得到2是偶数...依次类推。

f(0) -> f(2) -> f(4) -> f(6) -> f(8) -> f(10) 。

得出10是偶数。

参考代码

#include<bits/stdc++.h>
using namespace std;
bool f(int n){if(n==0)//如果n==0,则n是偶数return true;return f(n-2); //否则证明n-2是否为偶数
}
int main(){int n;cin>>n;cout<<f(n);return 0;
}

输入奇数会怎么样?

输入奇数就会无限递归下去,因为我们并没有为n是奇数的情况设计递归出口。如果n=7,就会去求n=5、3、1、-1、-3...一直递归下去。

我们可以在函数中添加,针对奇数情况的递归出口。(当n==1时,返回false)

训练:递归求和

请使用递归的方法,计算1+2+3+...+n的和。

【输入描述】1行:输入一个整数n。

【输出描述】1行:输出一个整数,表示求和的结果。

【样例输入】5

【样例输出】15

参考代码

#include<bits/stdc++.h>
using namespace std;
int sum(int n){if(n==1)return 1;return sum(n-1)+n;  
}
int main(){int n;cin>>n;cout<<sum(n);return 0;
}

训练:汉诺塔问题

汉诺塔(河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

问题建模

我们可以使用4个参数去描述汉诺塔问题。

void Hanoi(int n,char a,char b,char c);

n表示移动的是第n号盘子;

a,b,c分别表示汉诺塔问题中的三个柱子。

我们称a,b,c分别为:起始柱,辅助柱,目标柱。

递归关系

  • 根据游戏规则:想要移动n号盘,则需要先将n-1号盘从a柱移动到b柱。

此时我们的问题变成:Hanoi(n-1, a, c, b);

即:将n-1号盘从a柱出发,借助c柱,移动到b柱。

在这次移动的过程中a,c,b分别为:起始柱,辅助柱,目标柱。

  • 将n-1号盘子移到b柱之后,我们就可以将n号盘子,直接从a移动到c,即:a->c。

到这一步,我们完成了第n号盘子的移动。

接下来我们还需要将n-1号盘子(在b柱),移动到c柱上。

即:Hanoi(n-1, b, a, c);

在这次移动的过程中b,a,c分别为:起始柱,辅助柱,目标柱。

边界条件

当问题变成只有一个盘子时,我们就无须借助辅助柱,

直接从a移动到c柱即可。

参考代码

void Hanoi(int n,char a,char b,char c){if(n==1){cout<<n<<":"<<a<<"->"<<c<<endl;return ;}else{Hanoi(n-1,a,c,b);cout<<n<<":"<<a<<"->"<<c<<endl;Hanoi(n-1,b,a,c);}
}
int main(){Hanoi(3,'a','b','c');return 0;
}

从C++入门到算法,再到数据结构,查看全部文章请点击icon-default.png?t=N7T8http://www.bigbigli.com/

http://www.yayakq.cn/news/881744/

相关文章:

  • 建站公司一般用什么框架电商是做什么的工作内容是什么
  • 在网站建设论文的基本分析wordpress页面教程视频教程
  • 建设大型门户网站重庆seo关键词排名
  • 营销型网站名词解释天津网站建设方案优化
  • 学院网站建设情况顺德手机网站设计权威
  • 他人盗用公司资料建设网站怎么处理自助网站建设用什么好
  • 自己做网站自己买服务器兰州市城乡建设局网站公布的信息
  • 哪些外贸网站可以做soho网上贸易平台有哪些
  • 网站安全认证去哪做淘宝运营视频教程全集
  • 镇江网站设计多少钱greentree wordpress
  • 做网站1g1核够吗邯郸网站建设提供商
  • 奔驰宝马游戏网站建设唯尚广告联盟app下载
  • 网上商城网站建设方案本地app开发公司
  • 网站设置怎么删除设计公司logo需要注意什么
  • 做详情页比较好的网站企业网站建设 信科网络
  • 网页与网站设计说明公司网站建设计入什么明细科目
  • 云南网站建设哪家强东营企业网站建设
  • 企业电子商务网站建设设计目的度更新网站
  • 网站联盟三要素网站改版的影响
  • 网站适配移动端和PC端网页设计免费素材
  • 做一个网站成本多少中国新闻最新消息今天
  • jsp网站开发实现增删改查武当王也拜见老天师
  • 上海市建设注册管理网站wordpress 百度百科
  • 中国建设网官方网站下载e路惠州企业建站模板
  • 网站设计什么样风格会高端些定制幸福
  • 高校邦营销型网站建设答案企业网站模板seo
  • dz插件网站和自己做的网站区别大屏可视化ui设计
  • 郑州网站建设行情谷歌自建站和优化
  • 深圳建设网站哪家最好建设网站加盟
  • 一般网站用什么技术做的专业提升关键词排名工具