Допустим, мы пишем простую рекурсивную функцию fib(n)
, которая вычисляет n-е число Фибоначчи. Теперь мы хотим, чтобы функция напечатала это n-е число. Поскольку одна и та же функция вызывается неоднократно, должно быть условие, позволяющее печатать только корневому вызову. Вопрос в том, как написать это условие, не передавая никаких дополнительных аргументов, или используя глобальные / статические переменные.
Итак, мы имеем дело с чем-то вроде этого:
int fib(int n) {
if(n <= 0) return 0;
int fn = 1;
if(n > 2) fn = fib(n-2) + fib(n-1);
if(???) cout << fn << endl;
return fn;
}
int main() {
fib(5);
return 0;
}
Я думал, что корневой вызов отличается от всех дочерних элементов, возвращаясь к другому вызывающему, а именно к основному методу в этом примере. Я хотел знать, возможно ли использовать это свойство для записи условия и как.
Обновление: обратите внимание, что это надуманный пример, который служит только для представления идеи. Это должно быть ясно из тегов. Я не ищу стандартных решений. Спасибо.