參考自:
題目:定義
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...