#include
using namespace std;
int m, n, r;
int main()
{
cin >> m >> n;
do {
r = m % n;
m = n;
n = r;
} while (r != 0);
cout << m <<endl;
return 0;
}
#include
using namespace std;
int n;
void binary(int n) {
//递归出口
if (n == 0 || n == 1) {
cout << n;
return;
}
//递归条件
binary(n / 2);
cout << n % 2;
}
int main()
{
cin >> n;
binary(n);
return 0;
}
之前有笔记过汉诺塔问题
#include
using namespace std;
int a[] = {7, 4, 8, 6, 3, 2, 9, 11, 5};
int s(int l, int r) {
if (l == r) return a[l]; //递归出口
return a[l] + s(l + 1, r); //递归条件
}
int main()
{
cout << s(2, 3) <<endl;
return 0;
}
#include
using namespace std;
int a[] = {7, 4, 8, 6, 3, 2, 9, 11, 5};
int findMax(int l, int r) {
if (l == r) return a[l]; //递归出口
return a[l] > findMax(l + 1, r) ? a[l] : findMax(l + 1, r); //递归条件
}
int main()
{
cout << findMax(0, 4) <<endl;
return 0;
}
#include
using namespace std;
int a[] = {7, 4, 8, 6, 3, 2, 9, 11, 5};
void select(int l, int r) {
//递归出口
if (l == r) return;
//递归条件
for (int i = l + 1; i <= r; i++) {
if (a[i] < a[l]) {
swap(a[i], a[l]);
}
}
select(l + 1, r);
}
int main()
{
select(0, 8);
for (int i = 0; i < 9; i++) {
cout << a[i] << " ";
}
return 0;
}
P2562 [AHOI2002]Kitty猫基因编码
#include
using namespace std;
string s;
void func(int l, int r) {
//递归出口
int cnt = 0;
for (int i = l; i <= r; i++) {//计算0的个数
if (s[i] == '0') cnt++;
}
if (cnt == 0) { //全是1
cout << 'B';
return;
}
else if (cnt == (r - l + 1)) { //全是0
cout << 'A';
return;
}
//递归条件
int mid = (l + r) / 2;
cout << 'C';
func(l, mid);
func(mid + 1, r);
}
int main()
{
cin >> s;
func(0, s.length() - 1);
return 0;
}
P1028 [NOIP2001 普及组] 数的计算
#include
using namespace std;
int n;
int f(int n) { //表示以n结尾的、具有题述性质数字的个数
//递归出口
if (n == 1) return 1;
//递归条件
int sum = 1;
for (int i = 1; i <= n / 2; i++) {
sum += f(i);
}
return sum;
}
int main()
{
cin >> n;
cout << f(n) << endl;
return 0;
}
递归写法很明显是通不过测试的,因为效率太低。因此我们要用记忆化搜索来做。
待做…