#include <stdio.h>
int ride(int n) { //递归阶乘
if (n == 1) {
return 1;
}//当n=1的时候结束。
else if(n>1){
return n * ride(n - 1);//返回相乘的值
}
else { return 0; }
}
int sum(int n) { //递归求和
if (n == 1){
return 1; //当n=1的时候结束。
}
else if(n>1){
return n + sum(n - 1);//返回相加的值。
}
else { return 0; }
}
int tuzi(int n) {//兔子数列||斐波那契数列
if (n == 1||n==2){//当n=1或者n=2时结束
return 1;
}
else {
return tuzi(n - 1) + tuzi(n - 2);//返回相加的值。
}
}
//打印兔子数列的每一个。
void tuzip(int n) {
tuzi(n);
for(int i=1;i<=n;i++){
printf("%d ", tuzi(i));
}
}
//汉诺塔:有三根柱子,分为左、中、右,然后左柱上面有盘子,盘子会从大到小排列下来,想要将左柱的盘子移到右柱,每次只能移动一个盘子,并且大的盘子不能在小的盘子上面,可通过中柱补助移动。
void hannuo(int n, char a, char b, char c) {//汉诺塔游戏解法。
if (n == 1) {
printf("%c---->%c\n", a, c);//当游戏只有一个盘子的时候,直接从a柱移到c柱
} //递归结束
else {
hannuo(n - 1, a, c, b);//当有两个以上的时候,就将a柱上的小的盘子,借助c柱,先移到b柱上。
printf("%c---->%c\n", a, c);//然后直接将最后一个大盘子移到c柱上
hannuo(n - 1, b, a, c);//最后再将b柱上的借助a柱移到c柱上。
}
}
int main() {
printf("1、递归阶乘;2、递归求和;3、兔子数列;4、汉诺塔解法;按0结束游戏\n");
printf("请输入你要玩的递归,输入数字即可:");
while(1){
char ch;
ch = getchar();
printf("1、递归阶乘;2、递归求和;3、兔子数列;4、汉诺塔解法;按0结束游戏\n");
printf("请输入你要玩的递归,输入数字即可:\n");
int n;
switch (ch) {
case '1':
system("cls");
printf("递归阶乘:请问你要乘的最后一个是?\n");
scanf("%d", &n);
printf("%d\n", ride(n));
break;
case '2':
system("cls");
printf("递归求和:你要加的最后一个是?\n");
scanf("%d", &n);
printf("%d\n", sum(n));
break;
case '3':
system("cls");
printf("兔子数列:求的最后一位是?\n");
scanf("%d", &n);
printf("%d\n", tuzi(n));
tuzip(n);
printf("\n");
break;
case '4':
system("cls");
printf("汉诺塔:你要玩到第几关?\n");
scanf("%d", &n);
hannuo(n, 'a', 'b', 'c');
break;
case '0':
return 0;
break;
default:break;
}
}
system("pause");
return 0;
}