說到編程序,你們老是會想到各類酷炫的框架,只要掌握了新的技術框架,就以爲本身很牛了,其實真正體現一個程序牛逼的地方,就是掌握程序的靈魂:算法,今天教你們掌握一些基礎的算法,提升一個程序員的核心的競爭力。程序員
遞歸算法的定義 在計算機科學中是指一種經過重複將問題分解爲同類的子問題而解決問題的方法。遞歸式方法能夠被用於解決不少的計算機科學問題,所以它是計算機科學中十分重要的一個概念。絕大多數編程語言支持函數的自調用,在這些語言中函數能夠經過調用自身來進行遞歸。計算理論能夠證實遞歸的做用能夠徹底取代循環,所以在不少函數編程語言(如Scheme)中習慣用遞歸來實現循環。算法
遞歸算法demo 1.斐波那契數列編程
1,1,2,3,5,8,13,21,34,55,89......
var x = 0;
function fact(n) {
x++;
console.log('x', x);
if(n <= 2) {
return 1;
} else {
return fact(n-1) + fact(n-2);
}
}
fact(3);
複製代碼
代碼的精簡:
function fact(n) {
var result = 0;
result = n <= 2 ? 1:fact(n-1) + fact(n-2);
return result;
}
複製代碼
2.階乘數組
// 階層的算法
var x = 0;
function fact(n) {
x++;
console.log(x);
if(n <= 1){
return 1;
} else {
return fact(n-1) * n;
}
}
fact(5);
代碼的精簡:
function fact(n) {
var result = 0;
result = (n <= 1 && n >= -1)? 1:fact(n-1) * n;
return result;
};
複製代碼
以上兩個例子是遞歸算法裏面比較經典的例子,但願有助於你們對遞歸有一個更深的認識bash
在計算機科學中,二分搜索(英語:binary search),也稱折半搜索(英語:half-interval search)、對數搜索(英語:logarithmic search),是一種在有序數組中查找某一特定元素的搜索算法。搜索過程從數組的中間元素開始,若是中間元素正好是要查找的元素,則搜索過程結束;若是某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,並且跟開始同樣從中間元素開始比較。若是在某一步驟數組爲空,則表明找不到。這種搜索算法每一次比較都使搜索範圍縮小一半。框架
function binarySearch(arr, x, n) {
var left = 0;
var right = n-1;
var y = 0;
while(left <= right) {
y++
let middle = (left + right)/2;
if (x===arr[middle]) {
return middle;
}
if (x > arr[middle]) {
left = middle +1;
} else {
right = middle -1;
}
}
console.log(y);
return -1;
}
var arr = [1,2,3,2,8,12,56,3,9,10]
binarySearch(arr, 56, 10)
複製代碼
這個例子很好的實現了二分算法的核心,掌握二分算法,有助於寫出優秀的代碼編程語言
今天就給你們講解遞歸算法和二分算法,後續會有更多關於算法實現的經典demo,但願你們多去了解程序的靈魂:算法函數