⍝ Tail-recursive Fibonacci: ⎕io←1 fibonacci¨⍳10 1 1 2 3 5 8 13 21 34 55 {⎕io←0 ⋄ +/!∘⌽⍨⍳⍵}¨ ⍳10 ⍝ NN & JF 1 1 2 3 5 8 13 21 34 55 {+/{⍵!⌽⍵}(⍳⍵)-⎕io}¨⍳10 ⍝ (John R. Clark) 1 1 2 3 5 8 13 21 34 55 (.5×1+5*.5)∘{((⍺*⍵)-(1-⍺)*⍵)÷5*.5}¨⍳10 ⍝ Binet's formula (Dick Bowman). 1 1 2 3 5 8 13 21 34 55 ⍬∘⍴∘⊃∘(⊢∘⌽∘(+\)/)∘(,∘(⊂0 1))∘⍳ ¨⍳10 1 1 2 3 5 8 13 21 34 55 (0.5×1+1 ¯1×5*0.5)∘{(-⌿⍺∘.*⍵)÷-/⍺} ⍳10 ⍝ Binet (PMH) 1 1 2 3 5 8 13 21 34 55 {1∧+∘÷/0,⍵/1}¨0 to 10 ⍝ continued fractions 0 1 1 2 3 5 8 13 21 34 55 fib←{ ⍝ Sullivan z←0.5×1+s←5*0.5 ((z*⍵)-(2○○⍵)×z*-⍵)÷s } rnd←3∘{(10*-⍺)×⌊0.5+⍵×10*⍺} ⍝ round to 3 decimal places. rnd fib ¯5 ¯4.5 to 5 5 0.051 ¯3 0.083 2 0.134 ¯1 0.217 1 0.352 0 0.569 1 0.92 1 1.489 2 2.41 3 3.899 5 Fibonacci←{⎕io ⎕ml←0 1 ⍝ First ⍵ fibonacci numbers. s←⎕ns'' ⍝ Class s.(f←{⍺←⎕this ⋄ ⍺.i<2:⍺.n ⋄ ⊢⍺.n←+/⍺.a[⍺.i-1+⍳2].n}) ⍝ Method v←⎕ns¨⍵⍴s ⍝ Collection v.i←⍳⍵ ⍝ Item number v.n←⍵↑0 1 ⍝ Initialize v.a←⊂v ⍝ Each knows all v.b←(1+⍳⍵)⍴¨⊂v ⍝ Each knows self and previous? v.f 0 ⍝ Compute } Fibonacci 10 ⍝ P. Mansour 0 1 1 2 3 5 8 13 21 34 fibcode←{ ⍝ fibonacci-coding of number ⍵. pair←{ ⍝ fib-pair n←+/⍵ ⍝ next term. ⍺<n:⍵ ⍝ term large enough: finished. ⍺ ∇ 1↓⍵,n ⍝ next pair } ⍝ :: i j ← n ∇ i j vec←{ ⍝ ⍺ is accumulator. n(i j)←⍵ ⍝ remaining number and current fib pair. i=0:⍺,1 ⍝ exhausted radix list: accumulator, sentinel. f←(j-i),i ⍝ next fib pair. t←n≥j ⍝ next term and r←n-t×j ⍝ remainder. (t,⍺)∇ r f ⍝ accumulated fib-coding. } ⍝ :: [b] ← [b] ∇ n(i j) ⍬ vec ⍵,⊂⍵ pair 0 1 ⍝ fi } ↑⍕∘fibcode¨0 to 10 ⍝ fibonacci codding of 0..10 1 1 1 0 1 1 0 0 1 1 1 0 1 1 0 0 0 1 1 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 1 1 0 0 0 1 1 0 1 0 0 1 1 2 1∘fibonacci¨ 0 to 10 ⍝ Lucas sequence. 2 1 3 4 7 11 18 29 47 76 123 ⍝∇ fibonacci to Back to: code Back to: Workspaces