Hoje o assunto é semelhante ao meu post a respeito de Recursividade (http://aterribili.blogspot.com.br/2014/01/haskell-recursividade.html), vou falar mais um pouco, só que ao invés de usarmos Haskell, vamos usar C#!
(Se por acaso você não possua uma forma de compilar C#, replique o exercício em Java, é bem parecido!)
Se você ainda não sabe o que é Recursividade, aconselho ler meu post anterior.
Vamos imaginar um problema simples e que você não possa usar um
for
para resolver?Crie um método que Multiplica uma String, ou seja:
"a" * 3 = "aaa" "ab" * 2 = "abab"
Consegue imaginar algo do tipo?
Com o uso da Resursividade, podemos resolver esse problema de forma simples e elegante.
Vamos ver o Teste de Unidade primeiro, assim fica mais simples de entender:
... [TestMethod] public void DeveMultiplicarString(){ Assert.AreEqual("abab", new Multiplicador().MultiplicaString(2, "ab"); }
Daí ficou simples entender o que deve acontecer.
Vamos criar a classe Multiplicador:
public class Multiplicador() { public String MultiplicaString(int vezes, String string){ if(vezes == 1) //Aqui definimos uma Guarda return string; return string + Multiplicador(--vezes, string); } }
Feito isso, entenda que a Guarda é um ponto onde a execução do método será parada.
A execução do método é efetuada de forma recursiva, toda vez que a variável
vezes
for maior que 1.E existem n exemplos onde recursão é aplicável e criamos uma função muito mais legível aos olhos de outro programador.
Bom galera, por hoje é só! Estou preparando um post a respeito de Funcs no C#.
Qualquer coisa, email-me: abner.terribili@lambda3.com.br ou comente abaixo!
Cheers!
Ola Abner, tudo bem?
ResponderExcluirVi uma materia sua de metodo recursivo em C# e estou precisando montar um metodo onde calculo custo de uma lista de materiais. Porem nao estou conseguindo aplicar, voce poderia me ajudar neste metodo , ou qto voce cobraria pra me ajudar? Só falta isso para meu sistema.
Caso tenha skype e puder me adicionar
r.cardoso1