quinta-feira, 13 de fevereiro de 2014

C#: Um Pouco Mais Recursivo

E aí galera, tudo beleza?

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!


Um comentário:

  1. Ola Abner, tudo bem?
    Vi 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

    ResponderExcluir