我坚持使用以下功能,该功能出现在我已审核的其他一些帖子中。
function findSequence(goal) {
function find(start, history) {
if (start == goal)
return history;
else if (start > goal)
return null;
else
return find(start + 5, "(" + history + " + 5)") ||
find(start * 3, "(" + history + " * 3)");
}
return find(1, "1");
}
print(findSequence(24));
此链接也给出了。
Javascript..totally lost in this tutorial
在上面的解释中,答案试图设定一个11的目标。它们的起点为1,首先针对11进行测试,然后是6的开始,针对11进行测试。
我理解前两个步骤。但是,我不理解第2步(比较start
:6到goal
:11)到第3步(将start
:3与goal
进行比较的跳跃: 11)。
start
如何从6变回3,然后变回11(第4个子弹)?
答案 0 :(得分:7)
好的,这是使用控制台日志语句增强的代码版本。打开Chrome / Opera / Firefox eveloper工具并在那里执行此代码:
function findSequence (goal) {
function find (start, history, depth) {
depth = depth || 0;
console.log( Array( ++depth ).join('--> '), start, goal, history );
if (start == goal) {
console.warn( 'history' );
return history;
} else if (start > goal) {
console.error( 'null' );
return null;
} else {
console.info('recursion!');
return find(start + 5, "(" + history + " + 5)", depth) ||
find(start * 3, "(" + history + " * 3)", depth);
}
}
return find(1, "1");
}
console.info( findSequence(24) );
您将获得此程序的调用跟踪,并希望通过查看跟踪来直观地掌握递归的概念。