说到编程序,大家总是会想到各种酷炫的框架,只要掌握了新的技术框架,就觉得自己很牛了,其实真正体现一个程序牛逼的地方,就是掌握程序的灵魂:算法,今天教大家掌握一些基础的算法,提高一个程序员的核心的竞争力。
递归算法
-
递归算法的定义 在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。计算理论可以证明递归的作用可以完全取代循环,因此在很多函数编程语言(如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;
};
以上两个例子是递归算法里面比较经典的例子,希望有助于大家对递归有一个更深的认识
二分算法
- 二分算法的定义
在计算机科学中,二分搜索(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。
- 二分算法demo
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,希望大家多去了解程序的灵魂:算法