lgwebdream / FE-Interview

🔥🔥🔥 前端面试,独有前端面试题详解,前端面试刷题必备,1000+前端面试真题,Html、Css、JavaScript、Vue、React、Node、TypeScript、Webpack、算法、网络与安全、浏览器
https://lgwebdream.github.io/FE-Interview/
Other
6.77k stars 896 forks source link

Day252:说一下递归和迭代的区别是什么,各有什么优缺点? #1071

Open Genzhen opened 3 years ago

Genzhen commented 3 years ago

每日一题会在下午四点在交流群集中讨论,五点小程序中更新答案 欢迎大家在下方发表自己的优质见解 二维码加载失败可点击 小程序二维码

扫描下方二维码,收藏关注,及时获取答案以及详细解析,同时可解锁800+道前端面试题。

luuman commented 2 years ago
  1. 程序调用自身称为递归。
  2. 利用变量的原值推出新值称为迭代。

递归

优点:大问题转化为小问题,可以减少代码量,同时代码精简,可读性好;

缺点:就是递归调用浪费了空间,而且递归太深容易造成堆栈的溢出。

迭代

优点:代码运行效率好,因为时间只因循环次数增加而增加,而且没有额外的空间开销;

缺点:代码不如递归简洁

luuman commented 2 years ago
  function swap(array, i, j){
    const temp = array[i]
    array[i] = array[j]
    array[j] = temp
}
function bubble(array){
    let length = array.length
    for(let i = length-1; i>0; i--){
        for(let j=0; j<i; j++){
            console.log('bubble', j, j+1, array)
            if(array[j] < array[j+1]){
                swap(array, j, j+1)
            }
        }
    }
    return array
}
var str = [1, 2, 3, 4]
console.log(bubble(str))
function bubbles(array, i = array.length-1, j = 0){
    if(i===1){
        return array
    }
    if(j > i){
        j = 0
        i--
    }
    console.log(array, i, j)
    if(array[j] < array[j+1]){
        swap(array, j, j+1)
    }

    return bubbles(array, i, j+1)
}
var str = [1, 2, 3, 4]
console.log(bubbles(str))