真要解密嗎? 那就解個徹底吧 !
達文西密碼 (The Da Vinci Code) 一書中,羅浮宮館長被暗殺後,彌留之際寫下幾行重要線索,其中的一組字串 (13-3-2-21-1-1-8-5),就是費氏數列 (Fabonacci Sequence) 的第 2 ~ 9 個數字;經重新排序後,得到 1 1 2 3 5 8 13 21,即書中所找的瑞士銀行保險箱帳號。現實生活中,達文西的畫作已被人發現多處存在著黃金分割的蹤影,而黃金分割率 (Golden Ratio) 便是由費氏數列所推算而來。費氏數列長得是什麼樣子? 黃金分割率又是如何導出呢? 請見以下說明:
費氏數列又稱為黃金分割數列,欲產生此數列,須先取 0, 1 為數列的第一、二個數字,之後的數字則以前兩個數字相加而得;故知第三個數字為 1 (= 0 + 1)、第四個數字為 2 (= 1 + 1)、第五個數字為 3 (= 1 + 2),以此類推。
而黃金分割率的計算方式,便是將此數列任何相鄰的後一個數字除以前一個數字 (大除以小) ,所得結果會隨著數列的增加而趨近一數值,此數即為黃金分割率。
範例程式
declare @counter tinyint,
@current_number bigint,
@f_number bigint,
@max_sequence_no tinyint,
@number_minus_1 bigint,
@number_minus_2 bigint
declare @Fibonacci_Sequence table(
Serial_No tinyint,
Number bigint,
Golden_Ratio float
)
-- Initialization (begin) -------------------------------------------------------------------------
insert into @Fibonacci_Sequence (Serial_No, Number) values(1, 0)
insert into @Fibonacci_Sequence (Serial_No, Number) values(2, 1)
select @max_sequence_no = 43
select @counter = 3
-- Initialization (end) ---------------------------------------------------------------------------
WHILE @counter <= @max_sequence_no
BEGIN
select @number_minus_1 = number
from @Fibonacci_Sequence
where Serial_No = @counter - 1
select @number_minus_2 = number
from @Fibonacci_Sequence
where Serial_No = @counter - 2
select @current_number = @number_minus_1 + @number_minus_2
insert into @Fibonacci_Sequence (Serial_No, Number, Golden_Ratio)
values(@counter, @current_number, (@current_number * 1.0) / (@number_minus_1 * 1.0))
select @counter = @counter + 1
END
select * from @Fibonacci_Sequence
執行結果
