2016-12-07 2 views
-1

Может ли кто-нибудь помочь мне понять, как эта программа доходит до 8 в качестве конечного результата, ее жарки моего мозга!Пример рекурсии в C++

#include <iostream> 
#include <string> 
using namespace std; 
int unknown(int x); 

int main() 
{ 
    cout << unknown(1); 
} 

int unknown(int x) 
{ 
    int result, y = 2; 

    if (x >= 6) 
    return 1; 
    else 
    { 
     result = unknown(x + 2) * y; 
     return result; 
    } 
} 
+2

Пройдите через него по одному шагу за раз. –

+6

Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –

+0

@eggo, или если отладчик кажется сложной перспективой для вашего обжаренного мозга (эй, мы все там были), добавьте некоторые заявления о печати и продумайте, что распечатывается. –

ответ

1

Выполнение программы, после того, как неизвестно (1) называется выглядит следующим образом:

неизвестно (1): результат = неизвестно (1 + 2) * 2 = неизвестно (3) * 2

неизвестно (3): result = unknown (3 + 2) * 2 = неизвестно (5) * 2

неизвестно (5): result = unknown (5 + 2) * 2 = unknown (7) * 2

неизвестен (7): return 1

так что, если мы переходим от дна к вершине замены неизвестного (х) с результатом

неизвестно (7) = 1

неизвестно (5) = неизвестно (7) * 2 = 1 * 2 = 2

неизвестно (3) = неизвестно (5) * 2 = 2 * 2 = 4

неизвестно (1) = неизвестно (3) * 2 = 4 * 2 = 8

функция возврат 8.

+0

okay man Это был такой хороший способ объяснить это! Я полностью получил это сейчас, спасибо большое! – eggo

+0

Это означает, что вы соглашаетесь с ответом эго. –

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