Você está aqui: Delphi ::: Dicas & Truques ::: Recursão (Recursividade) |
|
Como usar recursividade em Delphi - Como usar recursão ou funções recursivas em DelphiQuantidade de visualizações: 14902 vezes |
|
Recursão ou recursividade é a habilidade que uma procedure ou function (função) possui de chamar a si própria uma vez, várias, indefinidamente ou até que a solução do problema a ser resolvido seja encontrada. Assim, podemos definir uma função recursiva (aqui uma procedure recursiva) em Delphi da seguinte forma (atenção: não execute este código):// uma procedure recursiva procedure Recursiva; begin // chama a si própria Recursiva; end; // vamos chamar a procedure pela primeira vez // a partir do Click de um botão procedure TForm1.Button1Click(Sender: TObject); begin Recursiva; end; O fato de eu pedir para que você não execute o código é que, uma vez clicado o botão, a procedure Recursiva será chamada e continuará chamando a si mesma até que a pilha do sistema estoure, ou seja, como funções recursivas são implementadas usando a pilha do sistema operacional e não na área de memória destinada a cada aplicativo o resultado será um travamento do programa, e, caso não estejamos com sorte, um travamento do sistema operacional. Sabedor do risco, clique no botão para ver o resultado você mesmo. O que devemos saber a respeito das funções recursivas é que estas precisam saber o ponto de parada, de forma a evitar chamadas infinitas. Como exemplo, veja uma procedure recursiva que conta de 0 até 10. Note como cada chamada verifica se já é hora de interromper a cadeia: // uma procedure recursiva que conta de 0 até 10 procedure Contar(valor: Integer); begin // vamos exibir o valor atual ShowMessage(IntToStr(valor)); // é hora de parar? if valor = 10 then ShowMessage('Terminei') else begin // chama a si própria (note que aumentamos o valor atual em 1) Inc(valor); Contar(valor); end; end; // vamos chamar a procedure pela primeira vez // a partir do Click de um botão procedure TForm1.Button1Click(Sender: TObject); begin // chama a função recursiva fornecendo o valor inicial Contar(0); end; Execute este código e veja o resultado. Observe que a cada chamada recursiva nós incrementamos a variável de controle. Ela é a responsável por evitar que chamadas infinitas sejam feitas. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
|
Link para compartilhar na Internet ou com seus amigos: | |
Anúncio Patrocinado | |
C# ::: Dicas & Truques ::: Strings e Caracteres |
Como contar as ocorrências de um caractere em uma string C# usando o método IndexOf() da classe StringQuantidade de visualizações: 16468 vezes |
Nesta dica mostrarei como podemos tirar proveito da função IndexOf() da classe String do C# para contar todas as ocorrências de uma letra em uma palavra, texto ou frase. Note que, além de retornar a quantidade de ocorrências do caractere, nós vamos mostrar também o índice de cada ocorrência. Veja o código C# completo: using System; namespace Estudos { class Program { static void Main(string[] args) { string frase = "Gosto muito de C#. E você?"; char letra = 'o'; // vamos pesquisar a letra "o" int quant = 0; int pos = -1, pos_ant = -1, cont = 0; while (cont < frase.Length) { pos = frase.IndexOf(letra, cont); if ((pos != pos_ant) && (pos != -1)) { Console.WriteLine("\"" + letra + "\" encontrada no índice " + pos); quant++; } cont++; // aumenta o contador pos_ant = pos; } Console.WriteLine("Encontrei " + quant + " ocorrências da " + "letra " + letra); Console.WriteLine("\n\nPressione uma tecla para sair..."); Console.ReadKey(); } } } Ao executar este código C# nós teremos o seguinte resultado: "o" encontrada no índice 1 "o" encontrada no índice 4 "o" encontrada no índice 10 "o" encontrada no índice 22 Encontrei 4 ocorrências da letra o |
C# ::: Dicas & Truques ::: Arquivos e Diretórios |
Como adicionar conteúdo ao final de um arquivo em C# usando as classes FileStream e StreamWriterQuantidade de visualizações: 9905 vezes |
Nesta dica mostro como usar as classes FileStream e StreamWriter para adicionar conteúdo a um arquivo já existente. Note que usamos o construtor de FileStream que aceita o caminho e nome do arquivo e o modo que ele será aberto. Ao fornecer o valor FileMode.Append nós estamos informando que, se o arquivo existir, mais conteúdo será adicionando ao seu final. Do contrário o arquivo é criado. Já no construtor de StreamWriter nós estamos fornecendo a codificação dos caracteres, neste caso, UTF-8. Para finalizar, escrevemos no arquivo usando os métodos Write() e WriteLine() da classe StreamWriter. Veja o código: static void Main(string[] args){ // vamos criar uma instância de FileStream. Note que neste // construtor nós estamos informando o caminho e nome do // arquivo e o modo de abertura do arquivo. Se o arquivo já existir // o novo conteúdo é adicionado. Se não existir, o arquivo é criado FileStream fs = new FileStream("dados.txt", FileMode.Append); // já temos o FileStream? vamos fornecê-lo a um StreamWriter StreamWriter sw = new StreamWriter(fs, Encoding.UTF8); // vamos escrever ou adicioar conteúdo no arquivo sw.WriteLine("Esta é mais uma linha"); sw.Write("Hoje é: "); sw.WriteLine(DateTime.Now); sw.WriteLine("Esta é a última linha"); sw.Flush(); sw.Close(); fs.Close(); Console.WriteLine("Acabei de escrever no arquivo"); Console.WriteLine("Pressione qualquer tecla para sair..."); // pausa o programa Console.ReadKey(); } Ao executar este código C# nós teremos o seguinte resultado: Acabei de escrever no arquivo Pressione qualquer tecla para sair... |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade) |
Exercícios Resolvidos de Java - Um método recursivo que calcula o MDC (máximo divisor comum) entre dois números inteirosQuantidade de visualizações: 8358 vezes |
Exercício Resolvido de Java - Um método recursivo que calcula o MDC (máximo divisor comum) entre dois números inteiros Pergunta/Tarefa: O máximo divisor comum ou MDC (mdc) entre dois ou mais números inteiros é o maior número inteiro que é fator de tais números. Por exemplo, os divisores comuns de 12 e 18 são 1, 2, 3 e 6, logo mdc(12, 18) = 6. A definição abrange qualquer número de termos, por exemplo mdc(10, 15, 25, 30) = 5. O cálculo do MDC entre x e y pode ser feito recursivamente da seguinte forma: Se y for igual a 0, então mdc(x, y) = x. Caso contrário, mdc(x, y) = mdc(y, x % y), no qual % é o operador de módulo (restante da divisão inteira). Escreva um método recursivo que receba dois inteiros e calcule o mdc. Seu método deverá possuir a seguinte assinatura: public static int mdc(int x, int y){ // sua implementação aqui } Informe o primeiro inteiro: 12 Informe o segundo inteiro: 18 O MDC dos valores 12 e 18 é 6 Veja a resolução comentada deste exercício usando Java console: package exercicio; import java.util.Scanner; public class Exercicio { public static void main(String[] args) { // cria um novo objeto da classe Scanner Scanner entrada = new Scanner(System.in); // vamos solicitar dois valores inteiros System.out.print("Informe o primeiro inteiro: "); // lê o primeiro inteiro int a = Integer.parseInt(entrada.nextLine()); // solicita o segundo inteiro System.out.print("Informe o segundo inteiro: "); // lê o segundo inteiro int b = Integer.parseInt(entrada.nextLine()); // mostra o resultado System.out.print("O MDC dos valores " + a + " e " + b + " é " + mdc(a, b)); System.out.println("\n"); } // método recursivo que calcula o mdc de dois inteiros public static int mdc(int x, int y){ // a recursividade é interrompida quando y for igual a 0 if(y == 0){ return x; } else{ return mdc(y, x % y); // efetua uma nova chamada recursiva } } } |
Java ::: Dicas & Truques ::: Matemática e Estatística |
Como converter de octal para decimal usando o método parseInt() da classe Integer da linguagem JavaQuantidade de visualizações: 9835 vezes |
Nesta dica eu mostrarei como podemos tirar proveito do método parseInt() da classe Integer do Java para converter um valor octal para decimal. Para isso nós só precisamos fornecer o valor 8 como segundo argumento para esta função. Veja o código completo: package arquivodecodigos; public class Estudos{ public static void main(String args[]){ String octal = "10"; // efetua a conversão de octal para // decimal int decimal = Integer.parseInt(octal, 8); // exibe o resultado System.out.println("O octal " + octal + " em decimal é " + decimal); System.exit(0); } } Ao executarmos este código nós teremos o seguinte resultado: O octal 10 em decimal é 8 |
Java ::: Dicas & Truques ::: Strings e Caracteres |
Como retornar a representação numérica de um caractere em Java fazendo um cast de char para intQuantidade de visualizações: 8986 vezes |
Um cast forçado de char para int é uma das formas mais práticas para se obter a representação numérica de um caractere em Java. Tudo que precisamos fazer é usar o método charAt() da classe String para obtermos o caractere na posição desejada de um texto, frase ou palavra e, em seguida, convertê-lo (cast) para um int. Veja o código completo para o exemplo: package arquivodecodigos; // Este exemplo mostra como obter a representação // númerica de um caractere public class Estudos{ public static void main(String[] args){ String frase = "Programando em Java"; for(int i = 0; i < frase.length(); i++){ int valor = (int)frase.charAt(i); System.out.println(frase.charAt(i) + " = " + valor); } System.exit(0); } } Ao executar este código Java nós teremos o seguinte resultado: P = 80 r = 114 o = 111 g = 103 r = 114 a = 97 m = 109 a = 97 n = 110 d = 100 o = 111 = 32 e = 101 m = 109 = 32 J = 74 a = 97 v = 118 a = 97 |
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
C++ - C++ Windows API GUI - Como criar sua primeira aplicação de interface gráfica usando C++ e WinAPI Java - Exercícios Resolvidos de Java - Contando de 1 até 20 e formatando a saída usando System.out.printf() |
Códigos Fonte |
Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |