![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
递归
yanyanwenmeng
这个作者很懒,什么都没留下…
展开
-
10进制与任意进制之间的相互转换
将一个十进制数x转换为任意进制数m(m<16)递归:#include<cstdio>char d[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};int turn(int n, int k)//将n转为k进制 { int r=0; r = n%k; n = n/k...原创 2019-01-06 20:29:56 · 5676 阅读 · 3 评论 -
2.3 N皇后(递归替代多重循环)DFS
当第k行与前面的k-1行不冲突的时候,才将皇后放在不冲突的位置。 for(i = 1; i <= N; i++)//(i列)前面的(k-1)行皇后已经摆好,看第k行的i列皇后摆放位置是否和前面的k-1行冲突 { int j; for(j = 1; j < k; j++)//前面的k-1行(j行) { if(queenPo...原创 2018-09-27 11:31:28 · 288 阅读 · 0 评论 -
2.4 逆波兰表达式(递归)
#include<iostream>#include<stdlib.h>using namespace std;double f(){ char s[20]; cin >> s; switch(s[0]) { case '+': return f()+f(); case '-': return f()-f(); ca...原创 2018-09-27 16:13:29 · 457 阅读 · 0 评论 -
第二周测验 全排列、2的幂次方表示
003:全排列描述给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列。输入输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。输出输出这个字符串的所有排列方式,每行一个排列。要求...原创 2018-09-28 17:16:32 · 323 阅读 · 0 评论 -
3.1 表达式求值(递归实现)
表达式可以是只有一个项组成,或者是多个项加减组成;项可以由一个因子组成,或者是多个因子乘除组成;因子可以由一个整数或者一个(表达式)组成。#include<iostream>#include<cstring>using namespace std;int term();int expr();int factor();...原创 2018-09-29 09:22:41 · 1235 阅读 · 3 评论 -
3.2 爬楼梯
用递归将问题分解为规模更小的子问题,一定要找到递归的边界,避免无穷递归下去。#include<iostream>using namespace std;int f(int n){ if(n == 1) return 1; else if(n == 2) return 2; else return f(n-1)+f(n-2);}i...原创 2018-09-29 15:16:59 · 240 阅读 · 0 评论 -
3.3 放苹果
将递归的问题分解为子问题来做(分类)当m、n很大时,要用动态规划来做,否则会超时。主要分为两大类,假设m为苹果数,n为盘子数当m<n时,此时肯定有空盘子,只需要将m个苹果放进m个盘子中就可以了。f(m,m).当m>=n时,又要分为两种情况,盘子为空和盘子不为空。当盘子有空的情况:此时至少要有一个盘子为空,此时就转换成将m个苹果放进n-1和盘子中...原创 2018-09-29 15:44:42 · 233 阅读 · 0 评论 -
3.4 算24
浮点数比较相等要用绝对值小于某个数(精度)来看。思路:要看4个数进行运算的结果是否为24,必须是先有两个数进行加减乘除运算,最后就只剩3个数了;然后再在3个数中选两个数进行加减乘除运算,最后加上运算结果就只有两个数了,这两个数再进行加减乘除运算,最后就只剩一个数了,就需要这样递归的来预算,看最终计算的最后一个数是否与24相等,如果相等就输出YES,不相等就输出NO。这...原创 2018-09-29 22:09:03 · 454 阅读 · 0 评论 -
第三周测验 简单的整数划分问题和Boolean Expressions
006:简单的整数划分问题描述将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。输入标准的输入包含若干组测试数据。每组测试数据是一个整数N(0 < N <= 50)。输出对于...原创 2018-09-30 17:09:34 · 679 阅读 · 0 评论 -
1192:放苹果
1192:放苹果时间限制: 1000 ms 内存限制: 65536 KB提交数: 4472 通过数: 2773【题目描述】把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。【输入】第一行是测试数据的数目t(0≤t≤20)。以下每行均包含二个整数M和N,以空格分开。1...原创 2019-06-21 11:22:07 · 2536 阅读 · 0 评论 -
2.2 汉诺塔问题
#include<iostream>using namespace std;int t = 0;void mov(int n,char a,char b,char c){ if(n==1) { cout << ++t << ":" << a <<"->" <&a原创 2018-09-26 10:51:21 · 255 阅读 · 0 评论 -
2.1 递归 求阶乘
递归和普通函数调用一样是通过栈来实现的,当调用到最后一层,就需要进行退栈操作。#include<iostream>using namespace std;int f(int n){ if(n==1)//边界条件 return 1; else return n*f(n-1);//递归条件 } int main(){ int n; ci...原创 2018-09-25 19:57:35 · 327 阅读 · 0 评论 -
遍历二叉树(数据结构,递归)
在二叉树的应用中,常常要求在树中查找具有某种特征的结点,或者对全部结点逐一进行某种处理。这就是二叉树的遍历问题。所谓二叉树的遍历是指按一定的规律和次序访问树中的各个结点,而且每个结点仅被访问一次。“访问”的含义很广,可以是对结点作各种处理,如输出结点的信息等。遍历一般按照从左到右的顺序,共有3种遍历方法,先(根)序遍历,中(根)序遍历,后(根)序遍历。先序:根、左、右;中序:左、根、右;原创 2017-08-30 16:57:59 · 363 阅读 · 0 评论 -
汉诺塔问题(递归)
6261:汉诺塔问题描述约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下、由小到大顺序串着由64个圆盘构成的塔。目的是将最左边杆上的盘全部移到中间的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面。这是一个著名的问题,几乎所有的教材上都有这个问题。由于条件是一次只能移动一个盘,且不允许大盘放在小盘上面,所以64个盘的移动次数是:1...原创 2017-08-19 22:25:27 · 820 阅读 · 0 评论 -
汉诺塔问题(用栈替代递归)
汉诺塔问题原创 2017-08-20 13:19:48 · 1112 阅读 · 0 评论 -
逆波兰表达式(递归)
1696:逆波兰表达式总时间限制: 1000ms 内存限制: 65536kB描述逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。原创 2017-08-20 15:08:11 · 1114 阅读 · 1 评论 -
放苹果(递归)
1664:放苹果总时间限制: 1000ms 内存限制: 65536kB描述把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。输入第一行是测试数据的数目t(0 输出对输入的每组数据M和N,用一行输出相应的K。样例输入17 3样例输出8来源lwx@PO原创 2017-08-21 01:22:19 · 680 阅读 · 1 评论 -
爬楼梯(递归)
4017:爬楼梯描述树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级也可以第一次走两级,第二次走一级,一共3种方法。输入输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 输出不同的走法数,每一行输入对应一行输出样例输入5810样例输原创 2017-08-21 00:13:48 · 2017 阅读 · 0 评论 -
四则运算(递归)
/*1. 表达式由一个或多个项组成;(+ and -)2. 一个项由一个或多个因子组成;(* and /) 3. 一个因子由一个或多个表达式或者一个整数组成。( ( and ) ) (2+3)*(5+7)+9/3*/ #include#include#includeusing namespace std;int factor_value();//读入一个因子,并返回其值in原创 2017-08-20 22:04:02 · 1142 阅读 · 0 评论 -
二叉树遍历(已知中序、先序求后序)
二叉树的遍历Time Limit: 1000msMemory Limit: 32768KBThis problem will be judged on HRBUST. Original ID: 204064-bit integer IO format: %lld Java class name: MainPrev Submit Status原创 2017-09-04 09:28:08 · 583 阅读 · 0 评论 -
二叉树遍历(已知先序、中序求后序)
【例3-4】求后序遍历时间限制: 1000 ms 内存限制: 65536 KB提交数: 11 通过数: 9 【题目描述】输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。【输入】共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。树的结点一律用小写字母表示。【输出】一行,表示树的后序遍历序列。原创 2017-09-03 23:09:07 · 1063 阅读 · 0 评论 -
二叉树遍历(已知中序和按层遍历求先序 递归)
二叉树遍历(flist)时间限制: 1000 ms 内存限制: 65536 KB提交数: 8 通过数: 6 【题目描述】树和二叉树基本上都有先序、中序、后序、按层遍历等遍历顺序,给定中序和其它一种遍历的序列就可以确定一棵二叉树的结构。假定一棵二叉树一个结点用一个字符描述,现在给出中序和按层遍历的字符串,求该树的先序遍历字符串。【输入】原创 2017-09-04 09:53:24 · 7489 阅读 · 0 评论 -
棋盘分割(递归,动态规划)
193:棋盘分割总时间限制: 1000ms 内存限制: 65536kB描述将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘。(每次切割都只能沿着棋盘格子的边进行)原棋盘上每一格有一个分值,一块矩形棋盘的总分为其所含各格分值之和。现在需要把棋原创 2017-08-19 12:11:55 · 2140 阅读 · 2 评论