递归阶乘,递归求和,兔子数列,汉诺塔

#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;
}
posted @ 2020-10-31 17:49  onedust  阅读(249)  评论(0)    收藏  举报