js递归:
- 递归函数就是函数对自身的调用,是循环运算的一种算法模式,可以有效地减少代码,三四行就可以解决复杂的逻辑问题
- 递归函数的使用要注意函数终止条件,避免进入死循环
几种简单且实用的写法:
/*求1,2,3,...到n的阶乘*/
function fn(n){
if( n == 1) return 1;
return fn(n - 1) * n;
}
console.log(fn(6)); // 输出 720
/*---------------------------------*/
/*求 n 的 m 幂次方*/
function foo(n,m){
if(m == 1) return n;
return foo(n,m-1) * n;
}
/*---------------------------------*/
/*求1,2,3,...n的和*/
function sum(n){
if( n == 1 ) return 1;
return sum(n-1) + n;
}
/*---------------------------------*/
/*求1,3,5,7,...第n项和前n项的和*/
//先求出第n项的值
function foo(n){
if(n == 0) return 1;
return foo(n-1) + 2;
}
//再求出前n项的值
function sum(n){
if(n == 0) return 1;
return foo(n) + sum(n-1);
}
/*-----------斐波那契数列--------------*/
//1,1,2,3,5,8,13,21...求第 n 项后一项为前两项的和
function fib(n){
if(n == 0 || n ==1) return 1;
return fib(n-1) + fib(n-2);
}
使用递归实现深拷贝
深拷贝指的是复制对象的时候完全拷贝一份对象,就算嵌套了对象也相互分离,深拷贝处理后的对象修改对象属性的时候只会影响这个对象本身,不会影响另一个,从而使得内存隔离,完全独立不会互相影响!
function clone(obj){
var temp = {};
for(var key in obj){
if(typeof obj[key] == 'object'){
temp[key] = clone(obj[key]);
}else{
temp[key] = obj[key];
}
}
return temp;
}