在示例中理解递归

  • 本文关键字:递归 javascript
  • 更新时间 :
  • 英文 :


我有一个freeCodeCamp:的例子

function countup(n) {
if (n < 1) {
return [];
} else {
const countArray = countup(n - 1);
countArray.push(n);
return countArray;
}
}
console.log(countup(5));

我不确定我说得对的部分是:

const countArray = countup(n - 1);

这是在调用函数countArray = countup(4)吗?该函数在当前函数完成后执行?

调用函数countArray = countup(4)

是。

当前任务完成后执行哪个?

否。countup(4)的执行立即开始;停止";执行CCD_ 4。CCD_ 5只能在countup(4)返回后恢复并将n推送到countArray(并返回数组(。

countup的调用与任何其他函数调用完全相同。没有任何拖延或特殊考虑,因为它在呼唤自己。

考虑这个";展开的";示例的版本:

function countup_a(n) {
if (n < 1) {
return [];
} else {
const countArray = countup_b(n - 1);
countArray.push(n);
return countArray;
}
}
function countup_b(n) {
if (n < 1) {
return [];
} else {
const countArray = countup_c(n - 1);
countArray.push(n);
return countArray;
}
}
function countup_c(n) {
if (n < 1) {
return [];
} else {
const countArray = countup_d(n - 1);
countArray.push(n);
return countArray;
}
}
function countup_d(n) {
if (n < 1) {
return [];
} else {
const countArray = countup_e(n - 1);
countArray.push(n);
return countArray;
}
}
function countup_e(n) {
if (n < 1) {
return [];
} else {
const countArray = countup_f(n - 1);
countArray.push(n);
return countArray;
}
}
function countup_f(n) {
if (n < 1) {
return [];
} else {
const countArray = countup_g_would_go_here(n - 1);
countArray.push(n);
return countArray;
}
}
console.log(countup_a(5));

在这里,没有任何函数调用自己,执行顺序也没有什么特别之处。在countup_a完成之前,它需要来自countup_b的答案,countup_c的答案等等……然后一旦countup_f返回一个值,countup_e就可以使用该值,等等……直到我们回到countup_a,它将其结果提供给console.log

您的示例中唯一的区别是,由于函数都有相同的代码,因此您不需要很多具有不同名称的函数,每次只需使用相同的函数即可。呼叫本身";堆叠";以完全相同的方式。

你调用的那一刻

const countArray = countup(n - 1);

另一个倒计时正在开始,与其他的倒计时平行。

最新更新