“蓝桥杯”递推和递归(一)——取数位

news/2024/11/17 6:49:37/

1. 算法简介

递推和递归虽然叫法不同,但它们的基本思想是一致的,在很多程序中,这两种算法可以通用,不同的是递推法效率更高,递归法更方便阅读。

(1)递推法

递推法是一种重要的数学方法,同时也是计算机进行数值计算的个重要算法。
递推法的核心是找到计算前后过程之间的数量关系,即递推式。递推式往往根据已知条件和所求问题之间存在的某种相互联系推导得出。递推计算时,需要将复杂运算转换为若干步重复的简单运算,这样可以发挥计算机擅于重复处理数据的特点。递推法避开了求通项公式的麻烦,把一个复杂问题的求解分解成了连续的若干歩简单运算,可以将递推法看成一种特殊的迭代算法。
[案例解析]铺方格
有2×n个长方形的方格,用一个1×2的骨牌铺满方格。例如当0=3时为2×3方格,骨牌的铺放方案有3种,

 骨牌铺设方案(1)
编写一个程序,试对给出的任意一个n(n>0)输出铺法总数。针对这个问题,要想直接获得问题的解答是相当困难的。可以用递推法,从简单到复杂逐步归纳出问题解的一般规律。分析过程如下。
当n=1时,只能有一种铺法 ,如图4-2(a)所示,铺法总数为X1=1。
当n=2时,骨牌可以并列竖排,也可以并列横排,再无其他排列方法,如图2(b)所示,铺法总数为X2 =2。
当n=3时,骨牌可以全部竖排,也可以认为在方格中已经有一个竖排骨牌、需要在方格中排列两个横排骨牌(无重复方法),若已经在方格中排列两个横排骨牌,则必须在方格中排列一个竖排骨牌,如图2(c)所示,再无其他排列方法,铺法总数为X3= 3。

 

骨牌铺放方案(2)
由此可以看出,当n=3时,排列骨牌的方法数是n=1和n=2时排列方法数之和。
推出一般规律,对一般的n,要求Xn。可以这样考虑:若第一个骨牌是竖排列,则剩下n-1个骨牌需要排列,这时排列方法数为Xn-1,若第一个骨牌是横排列,则整个方格至少有2个骨牌是横排列(1×2骨牌),因此剩下n-2个骨牌需要排列,这时排列方法数为Xn-2从第一种骨牌排列方法考虑,只有这两种可能,所以有:

Xn=Xn-1+Xn-2(n> 2)

X1=1

X2=2

Xn=Xn-1+ Xn-2就是问题求解的递推公式


任意n都可以从中获得解答。
例如n=5,

X3=X2+X1=3

X4=X3+X2=5

X5=X4+X3=8


利用程序表示为:

cin>>n;  
a[1]=1;a[2]=2;  
for(i=3;i<=n; i++)
a[i]=a[i-1]+a[i-2];
cout<<a[n]<<"";

(2)递归法

在计算机科学中,如果某个函数的实现中出现了对函数自身的调用语句,则称该函数为递归函数。
递推法可以用递归函数实现。一般来说,循环递推法比递归函数的速度更快,但递归函数的可读性更强。
例如,上述平铺方格问题改写成递归函数的形式如下。

int pu(int n)
{
if(n==1) return 1;
if(n==2) return 2;
return pu(n-1) +pu(n-2);
}

递归函数在它的函数体内直接或者间接地调用自身,每调用一次,就进入新的一层。递归函数必须有结束递归的条件。函数会一直递推 ,直到遇到结束 条件返回,递归函数调用的一般过程如图3所示,这里以n=6为例。

 递归函数的调用过程

2.  取数位(2017年试题E)

【问题描述】
求一个整数的第k位数字有很多种方法,以下下方法就是其中一种。
//求x用十进制表示时的数位长度


int len(int x){
if(x<10) return 1;
return len(x/10)+1;
}
//取x的第k位数字
int f(int x, int k) {
if(len(x)-k==0) returnx%10;
return (     )  ;//填空
}
int main()
int x= 23574;
printf("&d\n", f(x,3));
return 0;
}

对于题目中的测试数据,应该打印5。
请仔细分析源码,并补充画线部分缺少的代码。
注意:只提交缺失的代码,不要填写任何已有内容或说明性文字。

答案——取数位

  //求 x 用十进制表示时的数位长度int len(int x){if(x<10) return 1;return len(x/10)+1;}//取 x 的第 k 位数字int f(int x, int k) {if(len(x)-k==0) return x%10;return f(x/10,k) ;//填空}int main()int x= 23574;printf("&d\n", f(x,3));return 0;}


http://www.ppmy.cn/news/35650.html

相关文章

安全多方计算之八:Mix-Match

Mix-Match1. 混合网络基于ElGamal加密方案的混合网络2. PET协议3. Mix-Match协议4. 百万富翁问题的Mix-Match解决方案M.Jakobsson和A.Juels提出了基于Mix-Match的安全多方计算协议构造方法&#xff0c;该类协议包括Mix与Match两个阶段&#xff1a; Mix阶段&#xff1a;通过构造…

计算机视觉知识点(一)——交并比(IoU)及其若干改进

交并比&#xff08;IoU&#xff09;前言IoU公式及示意图IoU Loss缺点GIoU Loss公式及示意图缺点DIoU公式及示意图CIoU前言 目标检测是一个常见的计算机视觉任务&#xff0c;在目标检测任务中&#xff0c;交并比作为评判检测框的标准具有很重要的意义&#xff0c;在实际的应用中…

AI真的快让我们失业了,从ChatGPT到Midjourney

参考文章&#xff1a; https://mp.weixin.qq.com/s/3RdHPPhYgDfB6KY6Y9Sk2A跟AI有关的新闻&#xff0c;一个接着一个。前一天你还和往常一样进入梦乡&#xff0c;第二天醒来就能被新的AI新闻“炸弹”震得心惊。 以ChatGPT为代表的AI语言模型&#xff0c;以Midjourney为代表的…

node-HTTP协议

文章目录一. 概念二. 请求报文的组成三.HTTP请求行四.HTTP请求头五.HTTP的请求体六.响应报文的组成七.创建HTTP服务八.获取HTTP请求报文九.HTTP设置响应十.GET和POST请求的区别一. 概念 HTTP协议. 中文叫超文本传输协议; 是一种基于TCP/IP的应用层通信协议; 这个协议详细规定了…

如何使用MSF复现MS17-010漏洞?

MSF概述 Metasploit Framework(MSF)是一款开源安全漏洞检测工具&#xff0c;附带数千个已知的软件漏洞&#xff0c;并保持持续更新。Metasploit可以用来信息收集、漏洞探测、漏洞利用等渗透测试的全流程&#xff0c;被安全社区冠以“可以黑掉整个宇宙”之名。刚开始的Metasplo…

WPF 常用控件

WPF六种常用控件&#xff1a;布局控件、内容控件、带标题内容控件、条目控件、带标题条目控件和特殊内容控件(如:TextBox,TextBlock,Image等)。实例链接&#xff1a;WPF常用控件实例Window(窗体)Winodw窗体派生自ContentControl&#xff0c;有一个Content属性&#xff0c;里面可…

用于人工智能研究的开源Python微电网模拟器pymgrid(入门篇)

pymgrid是一个开源Python库&#xff0c;用于模拟微型电网的三级控制&#xff0c;允许用户创建或自行选择的微电网。并可以使用自定义的算法或pymgrid中包含的控制算法之一来控制这些微电网&#xff08;基于规则的控制和模型预测控制&#xff09;。 pymgrid还提供了与OpenAI Gy…

Linux硬链接与软链接

图示区别 硬链接 具有相同inode节点号的多个文件互为硬链接文件&#xff1b;删除硬链接文件或者删除源文件任意之一&#xff0c;文件实体并未被删除&#xff1b;只有删除了源文件和所有对应的硬链接文件&#xff0c;文件实体才会被删除&#xff1b;硬链接文件是文件的另一个入…