Recursive power function: Why does this work if there's no initial return value?

前端 未结 4 2114
小蘑菇
小蘑菇 2020-12-15 14:27

because power(base, exponent) has no return value unless exponent is 0, initially, shouldn\'t power(base, exponent -1) return \'undefined\', and therefore be unmultipliable,

4条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-15 14:48

    Look at what happens if you try to calculate 5^3:

    power(5, 3)  ... this should give us 125, let's see if it does...
    
    function power(base, exponent) {    // base = 5, exponent = 3
      if (exponent == 0)                // nope, exponent != 0
        return 1;
      else
        return base * power(base, exponent - 1);  // return 5 * power(5, 2)
    }
    

    ... what is power(5, 2) ? ...

    function power(base, exponent) {    // base = 5, exponent = 2
      if (exponent == 0)                // nope, exponent != 0
        return 1;
      else
        return base * power(base, exponent - 1);  // return 5 * power(5, 1)
    }
    

    ... what is power(5, 1) ? ...

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

    ... what is power(5, 0) ? ...

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

    ... putting that together, in reverse order as we walk back up the stack...

    power(5, 0) = returns 1
    power(5, 1) = 5 * power(5, 0) = 5 * 1 =  returns 5
    power(5, 2) = 5 * power(5, 1) = 5 * 5 =  returns 25
    power(5, 3) = 5 * power(5, 2) = 5 * 25 =  returns 125
    
    ... so, power(5, 3) returns 125, as it should.
    

提交回复
热议问题