Ir ao conteúdo
  • Cadastre-se

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


Talyson Maia
Ir à solução Resolvido por arfneto,

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

  • Solução
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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!