说到编程序,你们老是会想到各类酷炫的框架,只要掌握了新的技术框架,就以为本身很牛了,其实真正体现一个程序牛逼的地方,就是掌握程序的灵魂:算法,今天教你们掌握一些基础的算法,提升一个程序员的核心的竞争力。程序员
递归算法的定义 在计算机科学中是指一种经过重复将问题分解为同类的子问题而解决问题的方法。递归式方法能够被用于解决不少的计算机科学问题,所以它是计算机科学中十分重要的一个概念。绝大多数编程语言支持函数的自调用,在这些语言中函数能够经过调用自身来进行递归。计算理论能够证实递归的做用能够彻底取代循环,所以在不少函数编程语言(如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,但愿你们多去了解程序的灵魂:算法函数