Confusion in eloquent javascript power recursion sample

后端 未结 3 748
梦谈多话
梦谈多话 2021-01-25 16:29

this recursion code is from the book of eloquent javascript

function power(base, exponent) {
  if (exponent == 0) {
    return 1;
  }
  else {
    return base *          


        
3条回答
  •  日久生厌
    2021-01-25 17:14

    I find it easy to understand recursive procedures by looking at their base case first, then building up from there – here's the function we're studying...

    function power(base, exponent) {
      if (exponent == 0) {
        return 1;
      }
      else {
        return base * power(base, exponent - 1);
      }
    }
    

    So here, the base case is exponent == 0. We'll keep 2 as the input for base:

    power(2, 0) => 1
    

    Well that was really easy! All we had to do was evaluate an if statement and we arrived at our answer. Looking ahead, we see that power arrives at its base case by subtracting 1 from the exponent (exponent - 1), we'll reverse this to get our next input – so instead of power(2, 0) we will do power(2, 1)

    power(2, 1) => 2 * power(2, 0)
                => but wait! don't re-evaluate power(2,0)! we already know that answer from above
                => 2 * 1
                => 2
    

    Ok, we'll keep doing the same thing by incrementing exponent by 1 each time. But be careful not to do unnecessary work – if we've already evaluated one of the expressions earlier, just replace that expression with it's evaluated value

    power(2,2) => 2 * power(2, 1)
               => we already know power(2,1) == 2 ...
               => 2 * 2
               => 4
    
    power(2,3) => 2 * power(2,2)
               => we already know power(2,2) == 4, etc
               => 2 * 4
               => 8
    
    power(2,4) => 2 * power(2,3)
               => 2 * 8
               => 16
    
    power(2,5) => 2 * power(2,4)
               => 2 * 16
               => 32
    

    Now we can easily see a pattern and how the recursive procedure works in general

提交回复
热议问题