最近有点烦躁,各种面试都不顺利,所以打算静下心来整理一下

平时感觉自己挺牛逼的啊,怎么一面试就各种懵比了!这样的问题各位做为程序猿想必会经常遇到,下面写写今天的面试让我心里很不开心的一件事情,问题很简单,简单到无法原谅自己的地步,下面我们开始

1、问题是介个样子滴:小伙,用递归来段阶乘的代码呗!

尼玛这个当然很简单啊,可惜瞬间脑子短路了,过后回想起来抽自己两巴掌先!这种错误不可饶恕

那么现在我们来写下用递归来实现段阶乘

拿到需求肯定是要先分析一下滴

1.首先你得知道什么事阶乘,所有小于及等于该数的正整数的积,并且有0的阶乘为1。 自然数n的阶乘写作n!,比如10的阶乘10!=10*9*8*7*6*5*4*3*2*1

2.其次你得判断当用户传入的值为小于1或等于1的时候返回的值应该是1

3.最后得出以下的结果

1 function fn ( n ) {
2   return ( n <= 1 ) ? 1 : ( n * fn ( n - 1 ) ) ;     
3 }

 2、怎样清空一个数组

  我当时说的是第一种

  1、赋值为一个空数组以达到清空原数组,我比较菜,面试经验也少,基础也比较薄弱,所以反应也不是很快,就只想到了这个,这种办法其实好像并没有真正的清空,只是把原来的数组变为了空数组,我不是很明白,是不是有其他的数组应用了原数组的话就不会被垃圾回收?希望有大神看到后给解答一下,谢谢,先看下代码

var arr1 = [1,2,3,4]
var arr2 = arr1
arr1 = [];
console.log(arr1);
console.log(arr2);

//    []
//    [1, 2, 3, 4]

  2、将length赋值为0;当时面试官给我说的也是这一种,他的原话是为什么不把数组的长度置为0呢,你的做法(指第一种)岂不是又开辟了一个新的内存地址;

  回来之后都尝试了一下,一看,把原数组的长度置为0之后所有指向它的其他数组都变为空数组了,下面看代码

var arr1 = [1,2,3,4]
var arr2 = arr1
arr1.length = 0;
console.log(arr1);
console.log(arr2);

//    []
//    []

  3、利用数组的万能函数来清空数组

//    伪代码
arr1.splice(0,arr1.length);
//    解释一下,splice方法接受的第一个参数是指数组的下标位置,即删除/添加的起始位置,第二个参数是删除的数量,如果是0则不删除,第三个参数是可选参数,就是往数组添加新元素

var arr1 = [1,2,3,4];
var arr2 = arr1;
arr1.splice(0,arr1.length);
console.log(arr1);
console.log(arr2);

//    []
//    []

  当时的面试官问的是最快的方法,下面做下测试(都在google浏览器做的测试)

  1、

var arr1 = []
for(var ii = 0 ;ii<10000000;ii++){
    arr1.push(ii)
}
var arr2 = arr1
var start = new Date().getDate()
arr1 = []
var end = new Date().getDate()
console.log(end-start)

//    0

  2、

var arr1 = []
for(var ii = 0 ;ii<10000000;ii++){
    arr1.push(ii)
}
var arr2 = arr1
var start = new Date().getDate()
// arr1 = []
arr1.length = 0
// arr1.splice(0,arr1.length)
var end = new Date().getDate()
console.log(end-start)

//    0(google浏览器)

  3、

var arr1 = []
for(var ii = 0 ;ii<10000000;ii++){
    arr1.push(ii)
}
var arr2 = arr1
var start = new Date().getDate()
// arr1 = []
// arr1.length = 0
arr1.splice(0,arr1.length)
var end = new Date().getDate()
console.log(end-start)

//    0

  我都是在google浏览器上做的测试没看出有多大的区别,看到有园友做的测试:http://www.cnblogs.com/snandy/archive/2011/04/04/2005156.html

  他得出的结论是赋值为一个空数组以达到清空原数组即arr1 = []的办法更快更高效

  

原文地址:https://www.cnblogs.com/chuangyidai/p/5586473.html