嘿嘿大家!!
有人可以解释一下这个函数及其回调函数。这个东西怎么样?
function generate(n){
for(var i = 0; i<n; i++){
generate(n-1);
console.log(i + "," + n);
}
}
generate(3)
这是输出: 0,1 0,2 0,1 1,3 0,3 0,1 0,2 0,1 0,2 1,2 1,3 0,1 0,2 0,1 0,2 0,1 2,3
非常感谢!!
答案 0 :(得分:0)
所以这是一个递归的例子(我认为它像Inception)。
当您第一次调用函数generate(3)时,代码将执行以下步骤:
for(var i = 0; i<n; i++){
generate(n-1); //Once it sees this line inside the loop it *calls itself* so the next step, since n-1 = 2, the function generate(2) is executed inside the if loop within the first function call generate(3)
在generate(2)中,我们重复第一步,但是n = 2,所以运行以下代码:
for(var i = 0; i<n; i++){
generate(n-1); //n here is 2, so n-1 is 1. So the function calls itself again with the parameter 1. i.e generate(1)
如果在这一点上你认为这将永远记住它会在if条件下i = n时停止这样做。
在generate(1)中运行以下代码:
for(var i = 0; i<n; i++){
generate(n-1); //generate(0) is called
在generate(0)中,由于i = 0且n = 0,因此不满足if条件i <0,因此函数generate(0)不调用自身或返回任何值。这是我们进入这个递归洞的最深处,我们开始爬山。
代码将返回生成(1)(调用generate(0)并需要完成其if循环)。将运行以下代码行:
console.log(i + "," + n); //Prints out 0,1
现在,这个generate()实例已经完成了,我们继续攀爬,直到完成之前调用的其余generate()也完成了。
等
希望更清楚!