更好地理解递归

uelo1irk  于 2022-10-02  发布在  Java
关注(0)|答案(2)|浏览(94)

https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/basic-javascript/use-recursion-to-create-a-countdown

我们定义了一个名为Countdown的函数,它只有一个参数(N)。该函数应使用递归根据n参数返回包含从n到1的整数的数组。如果使用小于1的数字调用该函数,则该函数应返回空数组。例如,调用n=5的此函数应返回数组[5,4,3,2,1]。函数必须通过调用自身来使用递归,并且不能使用任何类型的循环。

// Only change code below this line

     function countdown(n){
          if (n<1)
          return [];
          else{
            const numbArray = countdown(n-1);
            numbArray.push(n)
            return numbArray;
          }
        }
        console.log(countdown(5))
    // Only change code above this line

看起来像[1 2 3 4 5]而不是[5 4 3 2 1]

我一直在绞尽脑汁,然后我用unShift方法完成了它,但我觉得它想让我使用Push,尽管这会将数据发送到堆栈的末尾

qlzsbp2j

qlzsbp2j1#

function countdown(max,currentN){
      if (currentN > max)
      return [];
      else if(currentN <= max){
   const numbArray = countdown(max,currentN+1);
        numbArray.push(currentN)
        return numbArray;
      }
    }
    console.log(countdown(5,1))
// Only change code above this line

基本上,它只计算开始时给出的终止值

ippsafx7

ippsafx72#

else {
 const arr = []
 arr.push(n)
 return arr.concat(countdown(n-1))
}

你可以用这个代码替换,问题的原因是你不理解递归,试着打破点,在浏览器或vscode中一步一步地观察函数的执行

相关问题