Torre de Hanoi recursión recursión rana problema salto

1. Torre de Hanoi recursión
en la Torre de Hanoi, supongamos que A, B, C tres pilares, la A-columna de arriba a abajo en orden ascendente coloca un disco de n, la columna A hasta la columna B por medio de en el disco moviendo a la columna de C, o de pequeño a grande desde la parte superior hasta el lugar más bajo.
Imagine un disco, mueva directamente al C (a-> c) en A, solamente un 2 ^ 1-1;
dos discos, por (A-> B, A-> C previstas en A, B-> C), tres veces de 2 ^ 2-1;
Imagínese tres placas, por (A-> C A-> B C- > B A-> C B-> a B-> C en a A-> C),
requiere siete 2 ^ 3-1;
si hay n discos, el problema se puede atribuir a la (n-1) ésima B, y luego en en el mayor C a, B ahora (n-1) en una placa, que se atribuye a la (n-2) ésimo en a, B y luego en en el mayor C, y así sucesivamente, implementado por recursión. Código es el siguiente

#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. Una rana puede saltar en un nivel de 1 clase, también se puede subir de nivel 2 pasos, preguntó la rana saltó n escaleras con un total de cuántos saltos.
Una especie de salto etapa del procedimiento;
salto de dos pasos dos métodos; 1or2
salto de tres pasos tres métodos; 111 o 12 o 21;
salto de cuatro pasos cinco maneras; 1111 o 121 o 112 o 211 o 22
lúpulo n pasos, pueden querer pedir un último salto o la última hop dos bandas se pueden atribuir al salto (n-1) de pasos y saltos ( n-2) añadir las escaleras saltar método, y así sucesivamente, recursiva. Código es el siguiente

#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 artículos originales · ganado elogios 23 · vistas 3333

Supongo que te gusta

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