forked from jruby/jruby
-
Notifications
You must be signed in to change notification settings - Fork 1
/
fib.rb
47 lines (40 loc) · 919 Bytes
/
fib.rb
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