两个简单地递归函数
递归实现:累加、阶乘
#include <stdio.h>
int diGuiJia(int n);//递归加法
long jieCheng(int n);//阶乘
int main(void) {
printf("%d\n", diGuiJia(10));
printf("%ld\n", jieCheng(25));
return 0;
}
int diGuiJia(int n)
{
if (n == 1) {
return 1;
}else{
return n + diGuiJia(n-1);
}
}
long jieCheng(int n)
{
if (n == 1) {
return 1;
}else{
return n * jieCheng(n - 1);
}
}
重点是要找到边界值
汉诺塔
伪算法:
if(n>1)
{
1.将前n-1个盘子从A借助C移动到B
2.将第n个盘子从A移动到C
3.将n-1个盘子从B借助A移动到C
}
#include <stdio.h>
void hanNuoTa(int n, char, char, char);
int main(void) {
char A = 'A';
char B = 'B';
char C = 'C';
printf("请输入需要移动汉诺塔个数:");
int num = 1;
scanf("%d", &num);
printf("移动步骤为:\n");
hanNuoTa(num, A, B, C);//从A借助B移动到C
return 0;
}
void hanNuoTa(int n, char A, char B, char C)
{
if (n == 1) {
printf("将编号为%d的盘子从%c移动到%c\n", n, A, C);
}else{
hanNuoTa(n-1, A, C, B);
printf("将编号为%d的盘子从%c移动到%c\n", n, A, C);
hanNuoTa(n-1, B, A, C);
}
}