Quando eu vou ver algum algoritmo complexo (busca binária, ordenação por intercalação, etc) eu sempre entendo os mesmos como funciona, porém, nunca consigo implementa-lo em uma linguagem de programação.
Vish, ninguém respondeu! ;-;
Normalmente conseguimos fazer algo quando temos a real necessidade de fazer, uma coisa puxa a outra.
Eu uso pseudocódigo. Algoritmos recursivos costumam ser mais difícil de implementar, então geralmente começo pela forma mais simples ou aquela que geralmente da mais trabalho.
Exemplo de busca binária recursiva:
meio = (fim - inicio) / 2 + inicio; // índice do meio
Se vetor[meio] < elemento {
retorna buscar(vetor, inicio, meio, elemento);
} senão {
retorna buscar(vetor, meio, fim, elemento);
}
as condições para finalizar são:
Se vetor[meio] == elemento {
retorna meio;
}
Se meio == fim {
retorna não encontrou;
}
então seria só juntar tudo:
buscar(vetor, inicio, fim, elemento) {
meio = (fim - inicio) / 2 + inicio; // índice do meio
Se vetor[meio] == elemento {
retorna meio;
}
Se meio == fim {
retorna não encontrou;
}
Se vetor[meio] < elemento {
retorna buscar(vetor, inicio, meio, elemento);
} senão {
retorna buscar(vetor, meio, fim, elemento);
}
}
outro exemplo, contar dias:
// hoje + o próximo dia
retorna 1 + contarDias(inicio + 1, fim);
as condições para finalizar são:
Se inicio == fim {
retorna 1;
}
Se inicio > fim {
exceção;
}
então:
contarDias(inicio, fim) {
Se inicio == fim {
retorna 1;
}
Se inicio > fim {
exceção;
}
retorna 1 + contarDias(inicio + 1, fim);
}
mas ainda tem o problema inicio + 1
(próximo dia) em que inicio
e fim
seria uma classe Data assim:
class Data {
int dia, mes, ano;
}
então
proximoDia(data) {
data.dia += 1;
Se data.dia >= 30 {
data.dia = 1;
data.mes += 1;
}
Se data.mes > 12 {
data.mes = 1;
data.ano += 1;
}
retorna data;
}
nem todos os meses tem 30 dias, então ainda seria necessário criar um método que retorna a qtd de dias no mês.
A pergunta pode nos levar a milhares de caminho, mas, entender como funciona e até fácil, o complicado e fazer isso na linguagem, talvez !!!
Treinar lógica, em programação é igual um jogador de futebol que treina chutes, para ficar bom tem que sempre treinar, então, TREINE, TREINE …
Eu treino até hoje! kkk