Нет. Как раз наоборот. Рекурсия - это естественный способ выразить целый класс проблем. Стек - это способ симулировать это, если у вас нет рекурсии.
См., Например, этот вопрос . Или рассмотрим стандартную рекурсивную функцию: вычисление n -го числа Фибоначчи.
Вы помните, что числа Фибоначчи являются сериями
0,1,1,2,3,5,8,13, ...
определено так, что F n = F n-1 + F n-2 .
Это может быть записано как рекурсивное определение как
Базовый корпус:
F (0) = 0
F (1) = 1
Рекурсивный шаг:
F (n) = F (n-1) + F (n-2)
Итак, у вас есть F (0) = 0, F (1) = 1, F (2) = F (0) + F (1) = 1 и т. Д.
Простая программа для вычисления этого (в C только для ухмылки):
int fib(int n) {
/* we'll ignore possible negative arguments, see Wikipedia */
switch(n) {
case 0: return 0; break;
case 1: return 1; break;
default: return fib(n-1)+fib(n-2); break;
}
}
Обратите внимание, насколько близко эта программа соответствует исходному определению?
Дело в том, что C управляет всеми промежуточными результатами в стеке вызовов . Некоторые языки не определены для этого (единственный, что я могу придумать, это старый Фортран, но я уверен, что есть и другие). Если вы пишете на ассемблере или старом FORTRAN, то вам нужно управлять своим собственным стеком, чтобы отслеживать эти промежуточные результаты.