我是代码世界的初学者。我很难理解JavaScript中的递归,尤其是当它需要两个或多个循环时。就像我想使用递归打印矩形。我不完全知道如何制作一个基本案例,条件何时仍然执行。例如,下面这些代码用于打印矩形或多孔矩形。

function box(num) {
  for (let i = 0; i < num; i++) {
    let str = ''
    for (let j = 0; j < num; j++) {
      str += '*'
    }
    console.log(str)
  }
}

box(5)


function holeBox (num) {
   for(let i = 0; i < num; i++){
    let str = ''
     for(let j = 0; j < num; j++){
        if(i == 0 || i == num -1 || j == 0 || j == num - 1) {
          str += '*'
        } else {
           str += ' '
        }
     }
     console.log(str)
   }
}

holeBox (5)


请帮助我理解递归,一个很好的解释。我的目标不仅是解决这些代码,而且要理解递归的工作方式。我搜索了没有足够的资源来学习递归,或者我太笨了以至于无法理解。提前致谢

最佳答案

是的,即使您的Box代码也可以转换为递归,但是我认为它不会帮助您理解递归的概念。

如果确实需要:

function getBox(arr, size) {
    let length = arr.length;
    if (length == size)
        return arr; // recursion stop rule - if the size reached
    for (let i = 0; i < length; i++)
        arr[i].push("*"); // fill new size for all row
    arr.push(new Array(length + 1).fill("*")); // add new row
    return getBox(arr, size); // recursive call with arr bigger in 1 row
}


但是,我相信@Gumbo的答案比这个更好地解释了这个概念...

10-07 19:08
查看更多