Page 74 - 6105
P. 74

На поточний момент в стеку вже два старих контексти

                      Вихід з pow (2, 1).


                      При виконанні pow (2, 1), на відміну від попередніх запусків, вираз n! = 1
               дорівнюватиме false, тому спрацює друга гілка if..else:


                      function pow (x, n) {

                        if (n! = 1) {

                          return x * pow (x, n - 1);
                        } Else {


                          return  x;  //  перший  степінь  числа  дорівнює  самому
               числу

                        }

                      }

                      Тут  вкладених  викликів  немає,  так  що  функція  закінчує  свою  роботу,

               повертаючи  2. Поточний контекст більше не потрібен  і видаляється з пам'яті, зі

               стека відновлюється попередній:

                      Контекст: {x: 2, n: 3, рядок 3}

                      Контекст: {x: 2, n: 2, рядок 3}

                      Відновлюється обробка зовнішнього виклику pow (2, 2).

                      Вихід з pow (2, 2).

                      І  тепер  уже  pow  (2,  2)  може  закінчити  свою  роботу,  повернувши  4.

               Відновлюється контекст попереднього виклику:

                      Контекст: {x: 2, n: 3, рядок 3}

                      Відновлюється обробка зовнішнього виклику pow (2, 3).

                      Вихід з pow (2, 3).

                      Самий зовнішній виклик закінчує свою роботу, його результат: pow (2, 3) = 8.

                      Глибина рекурсії в даному випадку склала: 3.

                      Значення глибини рекурсії, яка дорівнює максимальному числу контекстів,

               буде одночасно збережено в стеку.



                                                                73
   69   70   71   72   73   74   75   76   77   78   79