#!/usr/bin/ruby func continued_fraction(a, b, n=100) { a.run + (n > 0 ? (b.run / continued_fraction(a, b, n-1)) : 0); } var f = Hash.new( "√2" => [ do { var n = 0; { n++ ? 2 : 1 } }, { 1 }, ], "e" => [ do { var n = 0; { n++ || 2 } }, do { var n = 0; { n++ || 1 } }, ], "π" => [ do { var n = 0; { n++ ? 6 : 3 } }, do { var n = 0; { (2*(n++) + 1)**2 } }, 1_000, ], "π/2" => [ do { var n = 0; { 1/(n++ || 1) } }, { 1 }, 1_000, ] ); f.each { |k,v| printf("%3s ≈ %.9f\n", k, continued_fraction(v...)); };