无法理解此递归代码

时间:2017-02-13 05:32:20

标签: javascript recursion

我正在阅读 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值的减少情况。

由于我是递归的新手,我在哪里可以找到用于学习递归的良好资源/网站。

0 个答案:

没有答案