此函数如何与无循环的数组一起使用?

时间:2018-12-08 05:45:36

标签: javascript recursion

这是我的示例函数。

    let array = ["x", "y", "z", 4, 5];
    
    function print(arr, pos, len) {
      if (pos < len) {
        console.log(arr[pos]);
        print(arr, pos + 1, len);
      }
      return;
    }
    print(array, 0, array.length);

数组逐个打印。但是,这是怎么回事呢?有人澄清这里的功能过程吗?

3 个答案:

答案 0 :(得分:2)

  

这是怎么回事?

它正在使用 recursion ,这意味着该函数本身是从函数内部调用的。使用循环不是迭代集合的唯一方法。

如果您查看代码,则print函数在函数外部会被调用一次,但也会在print函数本身内部被调用。因此,当我们第一次使用数组[1, 2, 3]运行您的函数时,我们使用以下参数运行该函数:

print([1, 2, 3], 0, 3)

然后,当我们输入函数时,我们查看if语句,发现pos(0)实际上小于len(3)。因此,我们继续进行console.log(arr[0]),它将打印您数组中的第一项。

然后我们继续下一行,并再次调用print,但这一次是从函数内部进行的。现在,我们使用以下参数来调用它:

print([1, 2, 3], 1, 3)

这将再次遍历if语句,看看它是正确的,然后运行 console.log(arr[1])会再次使用以下参数调用print

print([1, 2, 3], 2, 3)

然后它将console.log(arr[2])(数组中的最后一项)并再次使用以下参数调用print

print([1, 2, 3], 3, 3),但是,这一次我们的if语句不满足/不正确,因为pos(3)不小于len(3)。换句话说,我们的基本情况(停止递归的条件)已得到满足。因此,我们要做的不是打印,就是return

执行return将使我们返回到上一次调用print语句的位置,这意味着我们将从先前对{{1 }},然后在if语句完成后再次print。展开过程一直持续到我们return最初调用if为止。之后,我们的程序将终止,因为没有更多的代码可运行。

答案 1 :(得分:1)

  

函数直接或间接调用自身的过程是   称为递归,相应的功能称为递归   功能

在您的情况下,这意味着从其函数体内多次调用print以打印数组内容。

let array = ["x", "y", "z", 4, 5];

function print(arr, pos, len) { // <-- notice current position is passed as parameter
  if (pos < len) {              // <-- keep doing it until end of the array
    console.log(arr[pos]);      // <-- prints to the console the value at current position
    print(arr, pos + 1, len);   // <-- print function is called again with dif. pos!
  }
  return;
}
print(array, 0, array.length);  // <-- call the print function with 0 and 5 as parameters

答案 2 :(得分:1)

这是一个递归函数:

阅读博客简单而有效:click Here