我正在阅读 Eloquent JavaScript 一书。 Recursion
主题中有一个程序,我无法清楚地了解它是如何工作的。
这是代码: -
function findSolution(target) {
function find(start, history) {
console.log('target',target)
console.log('start',start)
console.log('history',history)
if (start == target)
return history;
else if (start > target)
return null;
else
return find(start + 5, "(" + history + " + 5) ") ||
find(start * 3, "(" + history + " * 3) ");
}
return find(1, "1");
}
console . log ( findSolution (24) ) ;
这是控制台: -
VM182:47 target 24
VM182:48 start 1
VM182:49 history 1
VM182:47 target 24
VM182:48 start 6
VM182:49 history (1 + 5)
VM182:47 target 24
VM182:48 start 11
VM182:49 history ((1 + 5) + 5)
VM182:47 target 24
VM182:48 start 16
VM182:49 history (((1 + 5) + 5) + 5)
VM182:47 target 24
VM182:48 start 21
VM182:49 history ((((1 + 5) + 5) + 5) + 5)
VM182:47 target 24
VM182:48 start 26
VM182:49 history (((((1 + 5) + 5) + 5) + 5) + 5)
VM182:47 target 24
VM182:48 start 63
VM182:49 history (((((1 + 5) + 5) + 5) + 5) * 3)
VM182:47 target 24
VM182:48 start 48
VM182:49 history ((((1 + 5) + 5) + 5) * 3)
VM182:47 target 24
VM182:48 start 33
VM182:49 history (((1 + 5) + 5) * 3)
VM182:47 target 24
VM182:48 start 18
VM182:49 history ((1 + 5) * 3)
VM182:47 target 24
VM182:48 start 23
VM182:49 history (((1 + 5) * 3) + 5)
VM182:47 target 24
VM182:48 start 28
VM182:49 history ((((1 + 5) * 3) + 5) + 5)
VM182:47 target 24
VM182:48 start 69
VM182:49 history ((((1 + 5) * 3) + 5) * 3)
VM182:47 target 24
VM182:48 start 54
VM182:49 history (((1 + 5) * 3) * 3)
VM182:47 target 24
VM182:48 start 3
VM182:49 history (1 * 3)
VM182:47 target 24
VM182:48 start 8
VM182:49 history ((1 * 3) + 5)
VM182:47 target 24
VM182:48 start 13
VM182:49 history (((1 * 3) + 5) + 5)
VM182:47 target 24
VM182:48 start 18
VM182:49 history ((((1 * 3) + 5) + 5) + 5)
VM182:47 target 24
VM182:48 start 23
VM182:49 history (((((1 * 3) + 5) + 5) + 5) + 5)
VM182:47 target 24
VM182:48 start 28
VM182:49 history ((((((1 * 3) + 5) + 5) + 5) + 5) + 5)
VM182:47 target 24
VM182:48 start 69
VM182:49 history ((((((1 * 3) + 5) + 5) + 5) + 5) * 3)
VM182:47 target 24
VM182:48 start 54
VM182:49 history (((((1 * 3) + 5) + 5) + 5) * 3)
VM182:47 target 24
VM182:48 start 39
VM182:49 history ((((1 * 3) + 5) + 5) * 3)
VM182:47 target 24
VM182:48 start 24
VM182:49 history (((1 * 3) + 5) * 3)
VM182:61 (((1 * 3) + 5) * 3)
它是如何运作的?
start
之后63
值的减少情况。
由于我是递归的新手,我在哪里可以找到用于学习递归的良好资源/网站。