-
JavaScript中所谓的递归就是指函数反复调用自己的过程,通过递归来实现斐波那契数列也是一样的逻辑。
斐波那契数列指的是这样一个数列:
1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987…
第一项和第二项都是1,其余每一项都是前两项之和。
用递归算法实现斐波那契的方式如下:
若我们要找第10项的数字function fb1(n){ if(n <= 2){ return 1; }else{ return fb1(n-1) + fb1(n-2);//从这里开始反复调用自己直到条件终止 } } fb1(10)
-
通过递归实现二分查找
先列出之前写的通过非递归的方式的代码function binary_search(arr, key) { var low = 0; var high = arr.length - 1; while(low <= high) { var mid = parseInt((high + low) /2); if(key == arr[mid]) { return mid; } else if(key > arr[mid]) { low = mid + 1 } else { high = mid -1 } } return -1 } var arr = [1,3,4,5,7,8,10,18,23,44,63,86,99]; var result = binary_search(arr, 8); console.log(result);
递归和非递归实现二分查找都是利用了循环的思路。而不同之处是非递归是在一个函数内部通过while来循环,递归是整个函数通过调用函数自己来循环,如下:
var low = 0; var high = arr.length - 1; function binary_search(arr, low, high, key) { if(low > high) { return -1; } var mid = parseInt((high + low) / 2); if(arr[mid] == key) { return mid; } else if(arr[mid] > key) { high =mid -1; return binary_search(arr, low, high, key); } else if(arr[mid] < key) { low = mid +1; return binary_search(arr, low, high, key); } } var arr = [1,3,4,5,7,8,10,18,23,44,63,86,99]; var result = binary_search(arr, 0, 12, 8); console.log(result);
相比于非递归算法,递归算法实现二分查找时,函数的参数增加了low和high,这样在if条件下可以通过调用自己来改变查找的数组,其余思路和非递归相同。