Todos | Blog


Série de Fibonacci em diversos sabores

Publicado em 19/07/2007 15:27

Categorias: linux 

E ai galera, já faz um tempo !!!

Bom voltei finalmente com algumas novidades, como já sabem trabalho com PHP e também estou aprendendo e fazendo alguns trabalhos em RubyonRails no momento.

Agora com o incentivo de um amigo que está louco para aprender Java e precisava de uma companhia, resolvi finalmente aprender pra valer essa linguagem que muita gente fala, alguns bem outros mal, mas que na minha opinião o importante é usar a tecnologia que melhor se adapta as sua necessidades e conhecimento, não se essa é melhor que aquela ou vice versa, mesmo porque não adianta nada usar a melhor linguagem do mundo se não souber usar os recursos que ela oferece.

Só a título de curiosidade, fazendo um exercício sugerido no material, fiz a Série de Fibonacci em Java e depois me lembrei que o Taq uma vez demonstrou a mesma em Ruby usando hashes e ai fui mais fundo e resolvi ver como ela ficaria em Java, Ruby, Python e sem contar o PHP, que foi por onde comecei pra resolver o problema hehehe ...

Então segue a resposta nos variados sabores:

PHP:

1  <?php
2    function fib($n){
3      return ($n < 2)? $n : fib($n-1) + fib($n-2);
4    }
5    $n = 6;
6    for($i = 0;$i <= $n;$i++)
7      print $i." : ".fib($i)."\n";
8  ?>

Java:

1  class Fibonacci{
2    public static int fib(int i){
3      return (i < 2)? i : fib(i-1) + fib(i-2);
4    }
5    public static void main(String[] args){
6      int n = 6;
7      for(int i = 0; i <= n; i++)
8        System.out.println(i + ": " + fib(i));
9    }
10 }

Python:

1  def fib(n):
2    if n < 2:
3      return n
4    else:
5      return fib(n-1) + fib(n-2)
6  n = 6
7  for i in range(n):
8    print "%d : %d" %(i,fib(i))

Ruby:

1  Fib = Hash.new{|h, n| n < 2 ? h[n] = n : h[n] = h[n-1] + h[n-2]}
2  n = 6
3  for i in 0..n
4    puts i.to_s + ": " + Fib[i].to_s 
5  end

O resultado destes quatro programinhas é o mesmo pra todos, exatamente como mostrado abaixo:

0: 0
1: 1
2: 1
3: 2
4: 3
5: 5
6: 8

Neste exemplo de Ruby não estou usando o irb, criei um arquivo.rb, poderia ter feito o mesmo da forma como o Taq explicou aqui e que mostro logo abaixo, usando o irb:

Ruby:

Fib = Hash.new{|h, n| n < 2 ? h[n] = n : h[n] = h[n-1] + h[n-2]}
puts Fib[10]
=> 55

# ou 
Fib.inspect
=> "{5=>5, 0=>0, 6=>8, 1=>1, 7=>13, 2=>1, 8=>21, 3=>2, 9=>34,
 4=>3, 10=>55}"

# ou
Fib.sort
=> [[0, 0], [1, 1], [2, 1], [3, 2], [4, 3], [5, 5], [6, 8], 
[7, 13], [8, 21], [9, 34], [10, 55]]

Tentei resolver o problema usando o mesmo conceito nas quatro linguagens, lembrando que não sou especialista em nenhuma delas, deixo pra cada um tirar suas próprias conclusões e escolher a que achar melhor pra sua necessidade, espero não ter feito nenhuma barbaridade em nenhuma delas :-D.
Se alguém notar alguma coisa muito absurda e quiser me alertar por favor mande um e-mail para alfredo at bluetux.com.br, que eu corrijo.

Bom é isso ai, espero trazer algumas coisas interessantes desta nova experiência...

Abraço, T+
Alfredo Ribeiro


Todos | Blog

Sobre mim

Foto do Alfredo

Alfredo Cipriani Oliveira Ribeiro, 27 anos

Formado em Engenharia da Computação

São José do Rio Preto - SP

saiba mais...

Categorias