Torre de Hanói recursão recursão sapo problema salto

1. Torre de Hanoi recursão
na Torre de Hanoi, assumir que A, B, C, três pilares A-coluna de cima para baixo de forma ascendente colocado um disco de n, a coluna A da coluna B, através de no disco movendo-se para a coluna C, ou a partir de pequenas e grande a partir da parte superior para o local inferior.
Imagine um disco, passar directamente para o C (a-> c) em um, apenas a 2 ^ 1-1;
dois discos, por (A-> B, A-> C prevista em A, B-> C), três vezes de 2 ^ 2-1;
Imagina três placas, por (A-> C A-> B C- > B A-> C B-> A B> C em A A-> C),
requerem sete 2 ^ 3-1;
se existem n discos, o problema pode ser atribuída ao (n-1) º lugar B, e, em seguida, para a maior C a, B agora (n-1) sobre uma placa, de ser atribuído para a (n-2) em th, um B e, em seguida, para a maior C, e assim por diante, implementado por recursão. Código é a seguinte

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void Move(char pos1, char pos2)
{
	printf("%c->%c ", pos1, pos2);
}
//pos1开始位置
//pos2中间位置
//pos3结束位置
void Hanota(int n, char pos1, char pos2, char pos3)
{
	if (n == 1)
	{
		Move(pos1,pos3);
	}
	else
	{
		Hanota(n - 1, pos1, pos3, pos2);
		Move(pos1, pos3);
		Hanota(n - 1, pos2, pos1, pos3);
	}
}
int main()
{
	int n;
	printf("请输入盘子的数量\n");
	scanf("%d", &n);
	Hanota(n, 'A', 'B', 'C');
	system("pause");
	return 0;
}

2. Um sapo pode saltar em um nível 1 Classe, você também pode subir de nível 2 etapas, perguntou o sapo pulou n escadas de um total de quantos saltos.
Um tipo de um método passo salto;
salto dois passo dois métodos; 1or2
salto três passo três métodos; 111, 12 ou 21;
lúpulo quatro passo cinco maneiras; 1111 ou 121 ou 112 ou 211 ou 22
lúpulo n passos, pode querer encomendar um último salto ou último salto duas bandas podem ser atribuídas ao salto (n-1) de passos e salta ( n-2) adicionando as escadas método de saltar, e assim por diante, recursiva. Código é a seguinte

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int JumpFloor(n)
{
	if (n == 0)
	{
		return 0;
	}
	else if (n <= 2)
	{
		return n;
	}
	else
	{
		return JumpFloor(n - 1) + JumpFloor(n - 2);
	}
}
int main()
{
	int n=0;
	int ret = 0;
	printf("请输入台阶数\n", n);
	scanf("%d", &n);
	ret=JumpFloor(n);
	printf("%d\n", ret);
	system("pause");
	return 0;
}
Publicado 60 artigos originais · ganhou elogios 23 · vista 3333

Acho que você gosta

Origin blog.csdn.net/weixin_44945537/article/details/99686228
Recomendado
Clasificación