1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
# This script implements a simple single-recursive fib algorithm and a test for successively approximating
# the maximum fib recursion depth possible.
def fib(i)
fib_int(0, 1, 1, i)
end
def fib_int(i1, i2, count, max)
if (count == max)
i2
else
fib_int(i2, i2 + i1, count + 1, max)
end
end
def fib_test
puts "Estimating max fib recursion. This will be slightly lower than actual."
last_good = 1
current = 1
last_bad = nil
begin
while (true)
fib(current)
last_good = current
puts "good: #{last_good}"
if last_bad
return last_good if last_bad == last_good + 1
current = last_good + (last_bad - last_good) / 2
else
current = last_good * 2
end
end
rescue SystemStackError
last_bad = current
puts "bad: #{last_bad}"
if (last_bad == last_good + 1)
return last_good
else
current = last_bad - (last_bad - last_good) / 2
retry
end
end
end
|