<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: fibonacci code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Mon, 06 Oct 2008 00:53:53 GMT</pubDate>
    <description>DZone Snippets: fibonacci code</description>
    <item>
      <title>Fibonacci numbers in Ruby</title>
      <link>http://snippets.dzone.com/posts/show/3562</link>
      <description>From: http://www.ruby-forum.com/topic/67217&lt;br /&gt;Author: C Erler&lt;br /&gt;&lt;br /&gt;http://www.swox.com/gmp/manual/Fibonacci-Numbers-Algorithm.html&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;class Integer&lt;br /&gt;  FibonacciCache = Hash.new do |hash, key|&lt;br /&gt;    if hash.has_key?(key - 1) and hash.has_key?(key - 2)&lt;br /&gt;      hash[key] = hash[key - 1] + hash[key - 2]&lt;br /&gt;    elsif hash.has_key?(key + 1) and hash.has_key?(key + 2)&lt;br /&gt;      hash[key] = hash[key + 2] - hash[key + 1]&lt;br /&gt;    else&lt;br /&gt;      subkey = key.div(2)&lt;br /&gt;      case key.modulo(4)&lt;br /&gt;        when 1&lt;br /&gt;          hash[key] = (2*hash[subkey] + hash[subkey - 1])*(2*hash[subkey] - hash[subkey - 1]) + 2&lt;br /&gt;        when 3&lt;br /&gt;          hash[key] = (2*hash[subkey] + hash[subkey - 1])*(2*hash[subkey] - hash[subkey - 1]) - 2&lt;br /&gt;        else&lt;br /&gt;          hash[key] = hash[subkey] * (hash[subkey] + 2*hash[subkey - 1])&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;  FibonacciCache[0] = 0&lt;br /&gt;  FibonacciCache[1] = 1&lt;br /&gt;&lt;br /&gt;  def fib&lt;br /&gt;    return FibonacciCache[self]&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def fib_uncached&lt;br /&gt;    return FibonacciCache.dup[self]&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;start_time = Time.now&lt;br /&gt;1_000_000.fib&lt;br /&gt;#fibs = (5..10).map { |i| i.fib }&lt;br /&gt;#fibs = (1..100000).map { |i| i.fib }&lt;br /&gt;#puts fibs.size&lt;br /&gt;#puts fibs.last&lt;br /&gt;p Time.now - start_time&lt;br /&gt;&lt;br /&gt;puts "Doesn't work !" unless (1..10).map { |i| i.fib } == [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#-----------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# From: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/37727&lt;br /&gt;# Author: Shin-ichiro HARA&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  class QR3&lt;br /&gt;    attr_reader :a, :b&lt;br /&gt;&lt;br /&gt;    def inspect&lt;br /&gt;      "{#{@a},#{@b}}"&lt;br /&gt;    end&lt;br /&gt;    alias to_s inspect&lt;br /&gt;&lt;br /&gt;    def initialize(a, b)&lt;br /&gt;      @a, @b = a, b&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    def *(r)&lt;br /&gt;      u = (@a + @b)*(r.a + r.b)&lt;br /&gt;      v = (@a - @b)*(r.a - r.b)&lt;br /&gt;      QR3.new((u + v)&gt;&gt;1, @b*r.b + ((u - v)&gt;&gt;1))&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    def **(n)&lt;br /&gt;      if n == 0&lt;br /&gt;        QR3.new(1, 0)&lt;br /&gt;      elsif n &gt; 0&lt;br /&gt;        z = x = self&lt;br /&gt;        n -= 1&lt;br /&gt;        while (z*= x if n[0].nonzero?; (n &gt;&gt;= 1).nonzero?)&lt;br /&gt;          x *= x&lt;br /&gt;        end&lt;br /&gt;        z&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def fib_qr3(n)&lt;br /&gt;    (QR3.new(0, 1)**n).b&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;n = 1000&lt;br /&gt;&lt;br /&gt;start_time = Time.now&lt;br /&gt;fib_qr3(n)&lt;br /&gt;p Time.now - start_time&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 22 Feb 2007 12:24:45 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3562</guid>
      <author>ntk ()</author>
    </item>
    <item>
      <title>Fibonacci without loops nor recursions //JavaScript Function</title>
      <link>http://snippets.dzone.com/posts/show/870</link>
      <description>&lt;a href="http://jsfromhell.com/math/fibonacci"&gt;&lt;br /&gt;&lt;br /&gt;[UPDATED CODE AND HELP CAN BE FOUND HERE]&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;usage&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;for(var i = 11; --i &gt; -11; document.write(i, " = ", fibonacci(i), "&lt;br /&gt;"));&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;code&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//+ Jonas Raoni Soares Silva&lt;br /&gt;//@ http://jsfromhell.com/math/fibonacci [v1.0]&lt;br /&gt;&lt;br /&gt;fibonacci = function(n){&lt;br /&gt;	return Math.round(Math.pow((Math.sqrt(5) + 1) / 2, Math.abs(n)) / Math.sqrt(5)) * (n &lt; 0 &amp;&amp; n % 2 ? -1 : 1);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;/*this one requires very few recursions&lt;br /&gt;fibonacci = function(n){&lt;br /&gt;	var x;&lt;br /&gt;	return n &lt; 2 ? n : n % 2 ? (x = fibonacci(n = -(-n &gt;&gt; 1))) * x + (x = fibonacci(n - 1)) * x : (fibonacci(n &gt;&gt;= 1) + 2 * fibonacci(n - 1)) * fibonacci(n);&lt;br /&gt;};&lt;br /&gt;*/&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 07 Nov 2005 14:53:10 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/870</guid>
      <author>jonasraoni (Jonas Raoni Soares Silva)</author>
    </item>
  </channel>
</rss>
