- 求阶乘
- 打印i到j
- 数组求和
- 反转字符串
- 斐波那契数列
- 最大公约数
- 排序改递归
- 汉诺塔
代码如下:
#include <iostream>
#include <stdio.h>
#include <vector>
#include <string>
using namespace std;
int n, m;
vector<int> a;
string str;
int fun1(int m) {//求阶乘
if(m == 1) return 1;//终止条件
return m * fun1(m - 1);
}
void fun2(int i, int j) {//求i-j
if(i > j) return;//终止条件
printf("%d ", i);
fun2(i + 1, j);
}
int fun3(int temp) {//数列求和
if(temp == a.size() - 1) return a[temp];
return a[temp] + fun3(temp + 1);
}
int fun4(int temp) {//字符串反转
if(temp == 0)
printf("%c\n", str[temp]);
else{
printf("%c ", str[temp]);
fun4(temp - 1);
}
}
int fun5(int m) {//斐波那契数列
if(m == 1 || m == 2) return 1;
return fun5(m - 1) + fun5(m - 2);
}
int fun6(int m, int n) {//最大公约数
if(n == 0) return m;
return fun6(n, m % n);
}
void fun7(int n) {//插入排序
if(n == 0) return;
fun7(n - 1);
int temp = a[n];//记录要插入的元素
int index = n;
while(index > 0 && temp < a[index - 1]) {//寻找插入位置的过程
a[index] = a[index - 1];
index--;
}
a[index] = temp;//把位置找好了,将其插入进来
}
void fun8(int n, char from, char help, char to){//汉诺塔
if(n == 1) {
printf("move %d from %c->%c\n", n, from, to);
}
else{
fun8(n - 1, from, to, help);//1-(n-1)移到B上C做辅助
printf("move %d from %c->%c\n", n, from, to);//最大的盘子可到目标柱子
fun8(n - 1, help, from, to);//柱子角色发生变化
}
}
int main(){
// scanf("%d", &n);
// printf("%d\n", fun(n));
// scanf("%d%d", &n, &m);
// fun2(n, m);
// a = {0, 1, 2, 3, 4, 5, 6, 9};
// printf("%d\n", fun3(0));
// str = "abcdefghi";
// int len = str.length() - 1;
// fun4(len);
// scanf("%d", &n);
// printf("%d\n", fun5(n));
// scanf("%d%d", &m, &n);
// printf("%d\n", fun6(m, n));
// a = {6, 4, 2, 3, 4, 5, 6, 9};
// fun7(a.size() - 1);
// for(int i = 0; i < a.size() - 1; i++) printf("%d ", a[i]);
fun8(3, 'A', 'B', 'C');
return 0;
}