Skip to content

Latest commit

 

History

History

IterableFibonacci

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

可迭代費氏數列

費氏數列,又稱黃金分割數列,是自然界中非常常見的數列。它是由以下遞迴式所定義:

產生以下數列:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...

Iterable

Iterable 是 Julia 所提供的一個介面,只要有實作 iterate() 這個 API 的就稱為 Iterable。

這邊提供一個 Iterable 階層的例子作為參考。

範例:Iterable 階層

struct Factorial
    n::Int
end

function Base.iterate(fac::Factorial, (el, i)=(1, 1))
    if i <= fac.n
        return (el, (el*(i+1), i+1))
    else
        return nothing
    end
end

iterate 的機制是會每次回傳 (el1, (el2, next_i)),其中 el1 是目前的計算的結果,el2 是下一次的計算結果,next_i 則是下一次的計算順序。我們可以看到每次都會將下一次的結果計算好,如此一來就可以進行迭代。

julia> for i in f
           println(i)
       end
1
2
6
24
120
720
5040
40320
362880
3628800

也可以參考文章從 iterator 及 generator 到 iterable

請利用 Julia 所提供的 Iterable 介面撰寫產生費氏數列的程式,輸入為數列的序數,輸出為費氏數列的數值。

測試

@test fib(0) == 0
@test fib(1) == 1
@test fib(2) == 1
@test fib(4) == 3

測試資料

fib(0)
fib(1)
fib(2)
fib(4)
fib(10)
fib(50)
fib(80)
fib(90)