2014-11-12 7 views
3

Я работаю, чтобы понять рекурсию более подробно, и я борюсь с ПОЧЕМУ она работает так, как она. Я знаю, что эта функция возвращает квадрат предыдущего возврата (2, 4, 16, 256 и т. Д.), Но мне интересно, как он получает ответ.Как рекурсия работает?

Мое понимание рекурсии состоит в том, что она итерации возвращается к базовому корпусу, но это заставляет меня поверить, что в конечном итоге он всегда вернет базовый случай. Как он работает, чтобы вернуть что-то новое каждый раз?

int p1a(int num) { 
    if (num == 1) { return 2; } 
    else { 
     return pow(p1a(num-1), 2); 
    } 
} 

Вот пример моего мышления

num = 3 
passes through the base case and hits pow(p1a(num-1), 2) 
moves back to the start 
again passes through the base case and hits pow(p1a(num-1), 2) 
at this point, num = 1, so it would return 2 

Как это работает свой путь обратно вернуть 16? Я понимаю, что функция возвращает, но я застрял в процессе получения там.

+1

Хотя хороший CS вопрос, это не подходит для SO - понимание концепций CS должно выполняться на сайте, специфичном для этого объекта. SO Modus Operandi должен решить ваши проблемы, а не объяснять вам, как их создавать :) – KevinDTimm

+2

Чтобы представить, что происходит в рекурсии, полезно просмотреть каждый вызов рекурсивной функции как вызов уникальной функции. Другими словами, на первом проходе вы вызываете 'p1a', затем на следующем проходе вы вызываете' p1b', затем 'p1c' и т. Д. Теперь нет рекурсии, чтобы мутить ваше мышление. Это всего лишь цепочка вызовов функций. –

ответ

3

Вы думаете о шагах, линейно, в то время как выполнение фактически вложенных (представлено отступов):

call p1a(3) 
    call p1a(2) 
     call p1a(1) 
      return 2 
     return pow(2, 2) 
    return pow(4, 2) 

Таким образом, окончательный return возвращает значение 16.

Смежные вопросы