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