31 lines
961 B
Text
31 lines
961 B
Text
local fmt = require "fmt"
|
|
require "table2"
|
|
|
|
local function fib_n(initial, num_terms)
|
|
local n = #initial
|
|
if n < 2 or num_terms < 0 then error("Invalid argument(s).") end
|
|
if num_terms <= n then return initial:clone() end
|
|
local fibs = table.rep(num_terms, 0)
|
|
for i = 1, n do fibs[i] = initial[i] end
|
|
for i = n + 1, num_terms do
|
|
local sum = 0
|
|
for j = i - n, i do sum += fibs[j] end
|
|
fibs[i] = sum
|
|
end
|
|
return fibs
|
|
end
|
|
|
|
local names = {
|
|
"fibonacci", "tribonacci", "tetranacci", "pentanacci", "hexanacci",
|
|
"heptanacci", "octonacci", "nonanacci", "decanacci"
|
|
}
|
|
local initial = {1, 1, 2, 4, 8, 16, 32, 64, 128, 256}
|
|
print(" n name values")
|
|
local values = fib_n({2, 1}, 15)
|
|
fmt.write("%2d %-10s", 2, "lucas")
|
|
fmt.tprint("%4d", values, #values)
|
|
for i = 1, 9 do
|
|
values = fib_n(initial:slice(1, i + 1), 15)
|
|
fmt.write("%2d %-10s", i + 1, names[i])
|
|
fmt.tprint("%4d", values, #values)
|
|
end
|