递归的思想
“以此类推”是递归的基本思想
1. 具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。
2. 在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。
3. 解决问题的函数必须要有明显的结束条件,否则会出现无限递归的情况
// 斐波那契数列
function Fib(n) {
console.log(n)
if (n==0 || n==1){
return n;
}else {
return Fib(n-1)+Fib(n-2);
// Fib(3)
// Fib(2)+Fib(1) ;
// Fib(1) + Fib(0) ; 1
// 1 ; 0 ; 1
// final result : 1+0+1 = 2
}
}
console.log('FinalResult:'+Fib(3));
// 递归排序
function Sort(arr) {
if (arr.length<=1){
return arr;
}
let n = parseInt(arr.length/2);
let cur = arr.splice(n,1)[0];
let left = [];
let right = []
for (let i = 0;i<arr.length;i++){
if (arr[i]<cur){
left.push(arr[i])
}else {
right.push(arr[i])
}
}
return Sort(left).concat(cur,Sort(right))
// Sort([1,7,4,6])
// Sort([1]).concat(4,Sort([7,6]))
// [1].concat(4,[].concat(6,Sort([7])))
// [1].concact(4,[].concact(6,[7]))
// 1,4,6,7
}
console.log('FinalResult:'+Sort([1,6,4,7]))
// 等差数列求和,递归实现
function Sum(n) {
if (n>0){
return n+Sum(n-1)
}
return 0;
// 3+Sum(2)
// 3+2+Sum(1)
// 3+2+1+Sum(0)
// 3+2+1+0
// final result : 3+2+1+0 = 2
}
console.log('FinalResult:'+Sum(3))