How does this recursion work?

前端 未结 11 569
轮回少年
轮回少年 2020-11-30 11:03

This is an example from Eloquent Javascript:

By starting from the number 1 and repeatedly either adding 5 or multiplying by 3, an infinite amount of

11条回答
  •  一生所求
    2020-11-30 11:19

    You just have to create the tree of invocations to figure this out:

    findSequence(24)
        find(1, "1")
           find(1 + 5, "(1 + 5)")
               find(6 + 5, "((1 + 5) + 5)")
                   find(11 + 5, "(((1 + 5) + 5) + 5)"
                       find(16 + 5, "((((1 + 5) + 5) + 5) + 5)"
                           find(21 + 5, "(((((1 + 5) + 5) + 5) + 5) + 5)"
                              start > goal: return null
                           find(21 * 3, "(((((1 + 5) + 5) + 5) + 5) + 5)" 
                              start > goal: return null
                       find(16 * 3, "((((1 + 5) + 5) + 5) * 3)"
                           start > goal: return null
                   find(11 * 3, "(((1 + 5) + 5) * 3)"
                       start > goal: return null
               find(6 * 3, "((1 + 5) * 3)")
                   find(18 + 5, "(((1 + 5) * 3) + 5)")
                       find(23 + 5, "((((1 + 5) * 3) + 5) + 5)")
                           start > goal: return null
                       find(23 * 3, "((((1 + 5) * 3) + 5) * 3)")
                           start > goal: return null
                   find(18 * 3, "(((1 + 5) * 3) * 3)")
                       start > goal: return null
           find(1 * 3, "(1 * 3)") 
               find(3 + 5, "((1 * 3) + 5)")
                   find(8 + 5, "(((1 * 3) + 5) + 5)")
                       find(13 + 5, "((((1 * 3) + 5) + 5) + 5)")
                           find(18 + 5, "(((((1 * 3) + 5) + 5) + 5) + 5)")
                               find(23 + 5, "((((((1 * 3) + 5) + 5) + 5) + 5) + 5)")
                                   start > goal: return null
                               find(23 + 5, "((((((1 * 3) + 5) + 5) + 5) + 5) + 5)")
                                   start > goal: return null
                           find(18 * 3, "(((((1 * 3) + 5) + 5) + 5) * 3)")
                               start > goal: return null
                       find(13 * 3, "((((1 * 3) + 5) + 5) * 3)")
                           start > goal: return null
                   find(8 * 3, "(((1 * 3) + 5) * 3)")
                       return "(((1 * 3) + 5) * 3)"
               find(3 * 3, "((1 * 3) * 3)")
                   find(9 + 5, "(((1 * 3) * 3) + 5)")
                      find(14 + 5, "((((1 * 3) * 3) + 5) + 5)")
                          find(19 + 5, "(((((1 * 3) * 3) + 5) +5) + 5)")
                             return "(((((1 * 3) * 3) + 5) +5) + 5)"
                          find(19 * 3, "((((1 * 3) * 3) + 5) *3)")
                              start > goal: return null
                   find(9 * 3, "(((1 * 3) * 3) * 3)")
                        start > goal: return null
    

提交回复
热议问题