Swift學習 求Fibonacci數列

2021-07-02 05:44:15 字數 1725 閱讀 4988

參考自:

題目:定義

fibonacci

數列如下:

:看到斐波那契數列幾乎所有的程式設計師在第一時間的反應都是「遞迴

」,沒錯了,作為和漢諾塔一樣的經典遞迴問題,我們幾乎毫不猶豫就可以寫出如下的**:

func fibonacci_1(index:int)->int

else if index == 1

else

}

分析2

:既然上面演算法的主要缺點是要重複的計算很多不必要的數值,那麼我們的想法是不計算那些重複的值,我們考慮對於任意乙個

n值,我們從第一項開始,不斷的累積下去,這樣就可以避免重複計算。由於是從第一項逐次求解,所以該演算法的時間複雜度為

o(n)

。**如下:

func fibonacci_2(index:int)->int

else if index == 1

else

return fib}}

分析

3:最後介紹一種效率最高的演算法

o(logn)

,首先我們有下面的數學公式:

我們可以用數學歸納法證明如下:

step1: n=2

時step2

:設n=k

時,公式成立,則有:

等式兩邊同乘以

[1,1;1,0]

矩陣可得:

右,這正是

n=k+1

時的形式,即當

n=k+1

時等式成立。

由step1

和step2

可知,該數學公式成立。

由此可以知道該問題轉化為計算右邊矩陣的

n-1冪問題。

我們利用分治的演算法思想可以考慮如下求解乙個數

a的冪。

實現這種演算法需要定義矩陣,以及矩陣的有關運算,具體**如下:

//定義乙個矩陣結構體

struct matrix2by2

}//定義2x2矩陣的乘法運算

func matrixmultiply(matrix1:matrix2by2, matrix2:matrix2by2)->matrix2by2

//定義2x2矩陣的冪運算

func matrixpower(n:int)->matrix2by2

else if n % 2 == 0

else if n % 2 == 1

return matrix

}func fibonacci_3(index:int)->int

else if index == 1

else

}

Swift 對比學習Swift構造器

首先建立乙個類 實現方法如下 而當我們利用建構函式生成例項時有以下幾種方法 在oc的例子中,構造器initwithname age 內部呼叫了另乙個構造器,避免了 重複,下面來圍觀swift中如何實現。在swift中,當你建立乙個類或者結構體的時候,它們的屬性一定有初值 否則編譯不過,例如let a...

swift學習筆記

1 值永遠不會被隱式轉換為其他型別。如果你需要把乙個值轉換成其他型別,請顯式轉換。let label the width is let width 94 let widthlabel label string width could not find an overload for that acc...

swift學習資料

1 swift語法介紹官方英文版 the swift programming language 2 swift與objective c相互呼叫 using swift with cocoa and objective c 3 swift語法中文版 4 來自蘋果的程式語言 swift 5 關於swif...