Здравствуйте, Mangar, Вы писали: M> Если бы ветвей было наперед известное конечное число
А что меняется от того, что их число неизвестно? Ты же проходишь по ним через map.
Перепиши с map на велосипедную функцию — и все встанет на свои места.
Другое дело, что от переписывания в cps обход дерева может и не стать оптимальнее. Я не силен в твоем языке и не знаю, есть ли там такое понятие как stack overflow, но если нет — то контекст выполнения (либо объем съеденного стека, либо размер континуации) и так и так будет расти при спуске вниз по дереву и уменьшаться при подъеме вверх.