递归
递归的思想就是相信一个函数可以做到这个事情,然后利用这个函数来推之前的值完成这个事情
利用递归求n阶层
阶层的公式n!=123……(n-1)*n;n=0时:0!=1
- 我们要相信fn(n)是可以求到n的阶层
- 然后看公式中n的阶层等于(n-1)的阶层乘以n
- 利用函数得到f(n-1)
function strata(n){
if(n==1||n==0){
return 1;
}
else{
return strata(n-1)*n;
}
}
利用递归求走楼梯的方法
题目如果有n个阶梯,你每次都一节或者二节,有多少种走法
- fn(n)可以得到走到n级楼梯的走法
- 会想到n之前的最近的走法
- 最后如果走一节,到(n-1)节的时候,有f(n-1)种走法
- 如果最后走二节,到(n-2)之前就有f(n-2)中走法
- 所以到n的时候,总共有f(n-1)+f(n-2)
function go(n){
if(n==1||n==2){
return 1
}
else{
return go(n-1)+go(n-2);
}
}
原生深拷贝的方法
要理解为什么需要用深拷贝
- 基本类型和引用类型
- 赋值的时候 引用类型只是赋值了地址,而基本类型是赋值了值
- 完全拷贝,改变了新的对象的值,不会影响到原对象
只传递一个参数
function deepCopy(obj){
var newobj = {};
if(typeof obj === 'object'&& obj instanceof Array){
var newobj=[];
}
for(var key in obj){
if(typeof obj[key] === 'object'){
newobj[key]=deepCopy(obj[key])
}
else{
newobj[key]=obj[key];
}
}
return newobj;
}
一个新的对象一个老对象
function deepCopy2(oldobj,newobj){
var newobj = newobj || {};
for(var i in oldobj){
if (typeof oldobj[i]==='object') {
if(oldobj[i].constructor==='Array'){
newobj[i]=[];
}
else{
newobj[i]={};
}
deepCopy2(oldobj[i],newobj[i]);
}
else{
newobj[i]=oldobj[i];
}
}
return newobj;
}