![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础算法-----递归
PX-C
以学好IT技术为目的。
展开
-
1163:阿克曼(Ackmann)函数
【题目描述】阿克曼(Ackmann)函数A(m,n)A(m,n)中,m,nm,n定义域是非负整数(m≤3,n≤10)(m≤3,n≤10),函数值定义为:akm(m,n)=⎧⎩⎨n+1akm(m−1,1)akm(m−1,akm(m,n−1))(m=0时)(m>0,n=0时)(m,n>0时)akm(m,n)={n+1(m=0时)akm(m−1,1)(m>0,n=0时)akm(m−1,...原创 2018-07-16 10:25:59 · 4434 阅读 · 2 评论 -
1206:放苹果
【题目描述】把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。【输入】第一行是测试数据的数目t(0≤t≤20)。以下每行均包含二个整数M和N,以空格分开。1≤M,N≤10。【输出】对输入的每组数据M和N,用一行输出相应的K。【输入样例】17 3【输出样例】8 ...原创 2018-07-17 20:27:02 · 2904 阅读 · 0 评论 -
1205:汉诺塔问题
【题目描述】约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下、由小到大顺序串着由64个圆盘构成的塔。目的是将最左边杆上的盘全部移到中间的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面。这是一个著名的问题,几乎所有的教材上都有这个问题。由于条件是一次只能移动一个盘,且不允许大盘放在小盘上面,所以64个盘的移动次数是:18,446,744,0...原创 2018-07-18 10:12:01 · 4854 阅读 · 1 评论 -
1209:分数求和
【题目描述】输入nn个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为11;若最终结果的分母为11,则直接用整数表示。如:56、10356、103均是最简形式,而3636需要化简为12,3112,31需要化简为33。分子和分母均不为00,也不为负数。 【输入】第一行是一个整数nn,表示分数个数,1≤n≤101≤n≤10;接下来nn行,每行一个...原创 2018-07-18 10:41:31 · 3265 阅读 · 0 评论 -
1210:因子分解
【题目描述】输入一个数,输出其素因子分解表达式。【输入】输入一个整数 n (2≤n<100)。【输出】输出该整数的因子分解表达式。表达式中各个素数从小到大排列。如果该整数可以分解出因子a的b次方,当b大于1时,写做 a^b ;当b等于1时,则直接写成a。 【输入样例】60【输出样例】2^2*3*5这题还是学到些东西的,首先递归,刚开始我...原创 2018-07-18 13:04:33 · 5031 阅读 · 1 评论 -
1211:判断元素是否存在
【题目描述】有一个集合M是这样生成的:(1) 已知k是集合M的元素; (2) 如果y是M的元素,那么,2y+1和3y+1都是M的元素;(3) 除了上述二种情况外,没有别的数能够成为M的一个元素。问题:任意给定k和x,请判断x是否是M的元素。这里的k是无符号整数,x 不大于 100000,如果是,则输出YES,否则,输出NO。 【输入】输入整数 k 和 x, 逗号间隔。【输出...原创 2018-07-18 14:02:08 · 5993 阅读 · 0 评论 -
1158:求1+2+3+...
【题目描述】用递归的方法求1+2+3+……+N1+2+3+……+N的值。【输入】输入NN。【输出】输出和。【输入样例】5【输出样例】15递归的俩种方法一:常规方法:#include<iostream>#include<cmath>using namespace std;int f(int n){ if(n==1) return 1; ...原创 2018-07-15 13:22:45 · 2865 阅读 · 1 评论 -
1159:斐波那契数列
【题目描述】用递归函数输出斐波那契数列第n项。0,1,1,2,3,5,8,13……【输入】一个正整数n,表示第n项。【输出】第n项是多少。【输入样例】3【输出样例】1还是俩种方法#include<bits/stdc++.h>using namespace std;int sum;int f(int n){ if(n==0) return 0; if(...原创 2018-07-15 13:40:12 · 1723 阅读 · 0 评论 -
1160:倒序数
【题目描述】输入一个非负整数,输出这个数的倒序数。例如输入123,输出321。【输入】输入一个非负整数(保证个位不为零)。【输出】输出倒序的数。【输入样例】123【输出样例】321突然发现一个问题就是递归出口不是return结束的也会结束这些为啥,我理解为就是不在递归调用自己的那个函数了,那么它就开始返回了#include<iostream>#include<cmath>...原创 2018-07-15 13:58:11 · 2615 阅读 · 1 评论 -
1162:字符串逆序
【题目描述】输入一串以‘!’结束的字符,按逆序输出。【输入】如题述。【输出】如题述。【输入样例】abc!【输出样例】cba这题有一种为了出题而出题的感觉#include<iostream>#include<cmath>using namespace std;void f(string s,string::size_type n){ if(s[n]=='!')...原创 2018-07-15 14:30:26 · 3412 阅读 · 0 评论 -
1203:扩号匹配问题
题目描述】在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注。【输入】输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字...原创 2018-07-17 19:40:34 · 822 阅读 · 0 评论 -
1202:Pell数列
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#define N 1000010using namespace std;int a[N];int main(){ int n,k; a[1]=1; a[2]=2;...原创 2018-07-17 11:39:43 · 2449 阅读 · 0 评论 -
1164:digit函数
【题目描述】在程序中定义一函数digit(n,k),它能分离出整数n从右边数第k个数字。【输入】正整数n和k。【输出】一个数字。【输入样例】31859 3【输出样例】8这题的递归出口是我把flag==是递归出口 :这里要理解下递归出口,也就是这个递归中断了,也就是不在往下递归调用了那么它就会逐层返回了#include<iostream>#include<algorithm>...原创 2018-07-16 10:43:46 · 4550 阅读 · 3 评论 -
1165:Hermite多项式
【题目描述】用递归的方法求Hermite多项式的值hn(x)=⎧⎩⎨⎪⎪12x2xhn−1(x)−2(n−1)hn−2(x)n=0n=1n>1hn(x)={1n=02xn=12xhn−1(x)−2(n−1)hn−2(x)n>1对给定的xx和正整数nn,求多项式的值。【输入】给定的nn和正整数xx。【输出】多项式的值。【输入样例】1 2【输出样例】4.00注意下这个表达式的写法,与n有关...原创 2018-07-16 10:59:36 · 2547 阅读 · 0 评论 -
1166:求f(x,n)
其实这题没啥难的 就是要看清表达式然后递归写表达式 注意每一层表达式的关系其实有时候做题就是因为把题没读懂或读的不清楚或者畏惧题目而做不出来要有自信其实题目并不是我们想的这么难,都是学过的知识#include<iomanip>#include<iostream>#include<cmath>using namespace std;double f(do...原创 2018-07-16 11:22:08 · 3581 阅读 · 0 评论 -
1167:再求f(x,n)
和上题差不多 读懂这题的方程式 就很好写了#include<iomanip>#include<iostream>#include<cmath>using namespace std;double f(double x,double n){ if(n==1) return 1.0*x/(x+1); else return x...原创 2018-07-16 11:35:14 · 812 阅读 · 0 评论 -
1316:【例4.6】数的计数(Noip2001)
这个每次都要递归到i=1才能结束,时间超限了 90分#include<bits/stdc++.h>using namespace std;int ans=0;void dfs(int m){ ans++;//其实这个直接++,把本身算一种情况,递归 for(int i=1;i<=m/2;i++)//递归出口是不能遗漏的这个递归出口是当m=1时不执行for...原创 2018-07-16 13:49:14 · 3901 阅读 · 1 评论 -
1315:【例4.5】集合的划分
这题感觉还是很难得,要注意点:a 函数s返回值是long long型 因为可能种类比较多b 来说一下这个递归函数 1.n<k 和 k=0 这俩种情况是无法使用的 n个元素没有k个子集合大显然是无法实现的,不划分子集合也是0 2.n==k 和 k=1 相等说明每个子集合只有一个元素, k=1说明只有一个集合所有它要包含所有的元素,因为并集是s3 分俩总情况: {an}是k子集合中的一个,于是...原创 2018-07-16 14:58:08 · 4046 阅读 · 1 评论 -
1198:逆波兰表达式
【题目描述】逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。【输入】输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。【输出】输出为一行,表...原创 2018-07-16 16:17:36 · 4159 阅读 · 0 评论 -
1199:全排列
这题是全排列:还得自己思考才行 这个回溯就是回溯的时候把原来满足条件去掉的在改回来 #include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>using namespace std;char s[10],t[10];bool vis[10]...原创 2018-07-17 10:17:00 · 2873 阅读 · 0 评论 -
1200:分解因数
题目描述】给出一个正整数aa,要求分解成若干个正整数的乘积,即a=a1×a2×a3×...×ana=a1×a2×a3×...×an,并且1<a1≤a2≤a3≤...≤an1<a1≤a2≤a3≤...≤an,问这样的分解的种数有多少。注意到a=aa=a也是一种分解。【输入】第1行是测试数据的组数nn,后面跟着nn行输入。每组测试数据占11行,包括一个正整数a(1<a&l...原创 2018-07-17 11:07:47 · 8445 阅读 · 4 评论 -
1161:转进制
【题目描述】用递归算法将一个十进制数X转换成任意进制数M(M≤16)。【输入】一行两个数,第一个十进制数X,第二个为进制M。【输出】输出结果。【输入样例】31 16 {将十进制31转化为十六进制数}【输出样例】1F#include<iostream>#include<cmath>using namespace std;char num[16]={'0','1','2'...原创 2018-07-15 15:45:36 · 2109 阅读 · 0 评论