Предположим, вы хотите написать простую математическую восстановитель, который, к примеру, сделать преобразование:Существует ли какой-либо нерекурсивный/стек-потребляющий, восходящий двоичный древовидный поперечный алгоритм?
((add ((add 2) 3)) ((add 4) 2)) -> 11
Простой алгоритм может быть (например, в JavaScript):
function r(a){
if (typeof(a)!=="object") return a;
var a = [r(a[0]), r(a[1])];
return a[0][0]==="add" ? a[0][1] + a[1] : a;
}
console.assert(r([["add",[["add",2],3]],[["add",4],2]]) === 11);
Можно ли решить ту же проблему с постоянным стеком?
не рекурсивный ... рекурсивный? –
Плохая формулировка, я все еще не уверен, как назвать это. – MaiaVictor
Я не уверен, что вы тоже просите. Если он не может быть рекурсивным и не может создать стек, то что именно разрешено? Вы хотите пересечь дерево, но он не может построить стек вызовов? –