迭代和递归的代码比较(js)


 

 

迭代

  更省性能,效率高

  只更换房间内的物品

 

递归

  更耗性能,效率低

  占用很多房间,每个房间都放物品,直到进入了最后一道防线(设置的出口),然后再开始运算...

 

感受

  看到很多人吹爆了递归,说这更贴近人的思维,是神一样的存在之类。所以才有了这篇随笔。

  更贴近人的思维?你家的人的思维是拿到一道类似阶层、斐波那契数列的题目,是倒推到“原点”,然后再一个个计算出来吗?(are u kidding me?)

  你中学的数学题,难道不是用迭代的思维写的解题过程?

  以此类推,递归更加贴近人的思维的说法根本站不住脚,只是你习惯了递归的简洁写法,哪怕代价是忽略了性能而已。——如果你喜欢递归而非迭代,那么你可能很少动脑了。

  知道自己想要写的是什么效果,那么迭代和递归,对我们来说都一样的。

  如果是我,我写迭代的时候比写递归的时候顺一点,因为我可能会忘了设置出口,调试的时候才发现好像有什么不对... 当然,这也和我很少写递归有关。

  最后,我想说的是,代码的艺术,是用更少的代码,写更多的功能的同时,也是用更有限的性能,写出更多的功能。追求性能极致是很酷的一件事。——尤其在思维而非语言的时候。

 

例子

  阶层和斐波那契数列

 

 

/*
迭代 n的阶层
*/
function f(n){
    if(0===n) return 0;
    let z=1;
    for(let i=1; i<=n; i++){
        z *= i;
    }
    return z;
};

/*
迭代 斐波那契数列
*/
function d(n){
    if(1===n || 2===n) return 1;
    if(n<=0) return;
    let z =1;
    let x =1;
    for(let i=3; i<=n;i++){
        z +=x;
        x = z-x;
    } 
    return z;
}


/*
递归 n的阶层
*/
function f2(n){
    if(1===n) return 1;
    return n*f2(n-1);
};

/*
递归 斐波那契数列
*/
function d2(n){
    if(1===n || 2===n) return 1;
    return d2(n-1) + d2(n-2);
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM