Помощь - Поиск - Пользователи - Календарь
Полная версия: Рекурсия в дереве
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Vandrouny
Вечно у меня проблемы с рекурсией...
Короче, в дереве надо посчитать количество узлов, имеющих 2 направления связи.
Т.е., все узлы за вычетом листьев и корневого узла.

У меня выходит такая процедура:

Код

function calcsum(tree:adrzv):integer;
Begin
if (tree^.lev=nil) and (tree^.prav=nil) then calcsum:=0
else calcsum:=calcsum(tree^.prav)+calcsum(tree^.lev)+1
end;


Но паскаль ругается, что stack overflow error.
Само дерево я ввожу, и с ним всё очень даже нормально.
В чём ошибка?



volvo
function calcsum(tree: adrzv): integer;
begin
  calcsum := 0;
  if (tree = nil) or
     ((tree^.lev=nil) and (tree^.prav=nil)) then exit;

  calcsum := calcsum(tree^.prav) + calcsum(tree^.lev) + 1;
end;
попробуй... И посмотри, что у тебя было не так.
Vandrouny
Цитата(volvo @ 1.05.2009 22:11) *

function calcsum(tree: adrzv): integer;
begin
  calcsum := 0;
  if (tree = nil) or
     ((tree^.lev=nil) and (tree^.prav=nil)) then exit;

  calcsum := calcsum(tree^.prav) + calcsum(tree^.lev) + 1;
end;
попробуй... И посмотри, что у тебя было не так.


Работает!
Спасибо!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.