Ir ao conteúdo

C++ Entender um código pequeno c++ (recursão)


Ir à solução Resolvido por arfneto,

Posts recomendados

Postado

Olá, boa noite. Eu estava vendo alguns códigos fáceis de jogos no youtube. Eu vi um sobre a torre de hanói e fiquei curioso. Eu marquei alguns pontos do código e queria entender o porquê disso.
Eu marquei em vermelho as partes do código que eu não entendi. Logo abaixo do código tem as minhas dúvidas.

 

_____________________________________________________________

#include <iostream>
using namespace std;

void torre(int n, char orig, char dest, char aux) {
    if(n == 1) {
        cout << orig << " -> " << dest << endl;
        return;
    } else {
        torre(n - 1, orig, aux, dest);
        cout << orig << " -> " << dest << endl;
        torre(n - 1, aux, dest, orig); 
        
    }
}

int main() {
    int n;
    cin >> n;
    torre(n, 'A', 'C', 'B');
}

Entrada:
3

Saída:

A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C

_____________________________________________________________

1. Isso é uma função void, porquê tem um retorno sem nada?

2. Vocês conseguem entender qual o motivo de chamar a função duas vezes? Tentei usar a minha lógica pra entender o porque ele chama antes do cout e depois, mas eu não consegui entender.

 

  • Obrigado 1
  • Solução
Postado
2 horas atrás, Talyson Maia disse:

1. Isso é uma função void, porquê tem um retorno sem nada?

2. Vocês conseguem entender qual o motivo de chamar a função duas vezes? Tentei usar a minha lógica pra entender o porque ele chama antes do cout e depois, mas eu não consegui entender.

 

1. Isso é void. Apenas retorna ao chamador. É a definição.

 

2. Você entendeu o que é esse lance da torre de Hanoi?

 

A saída do programa você postou. Aquelas linhas são o resultado do cout, a unica saida do programa.

 

A razão de usar assim é porque para trocar os discos de um pino para outro é a mesma coisa se já tiver uma disco a menos, desde que não coloque um maior sobre outro, e assim é mais simples de ler e implementar se simplesmente chamar a mesma função de novo especificando um disco a menos

  • Curtir 1
  • Amei 1
Postado

@arfneto Eu entendi sim como funciona a torre de hanói. Eu entendi o que a questão pede. Só não consegui entender porque a função foi chamada duas vezes.

" } else {
        torre(n - 1, orig, aux, dest);
        cout << orig << " -> " << dest << endl;
        torre(n - 1, aux, dest, orig);  "

  • Amei 1
Postado
22 minutos atrás, Talyson Maia disse:

Eu entendi sim como funciona a torre de hanói. Eu entendi o que a questão pede. Só não consegui entender porque a função foi chamada duas vezes.

 

Bem, não sei o que dizer. Se você entendeu como funciona a tal torre de Hanoi, uma coisa meio bobinha na verdade, então sabe que a solução é em dois passos, usando um pino auxiliar para colocar os discos e ir trocando de um para o outro até os discos estarem na posição certa no pino destino...

 

Aí você vê o código em dois passos

 

25 minutos atrás, Talyson Maia disse:
" } else {
        torre(n - 1, orig, aux, dest);
        cout << orig << " -> " << dest << endl;
        torre(n - 1, aux, dest, orig);  "

 

 

e entende que são os dois passos. E o tal aux deve ser o pino auxiliar...

  • Curtir 1
  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!