Достаточно просто посчитать количество вызовов на countTrees
, который использует этот алгоритм для
заданное количество узлов. После нескольких пробных запусков мне кажется, что требуется 5 * 3 ^ (n-2) вызовов для n> = 2, который растет намного медленнее, чем n !. Доказательство этого утверждения оставлено читателю в качестве упражнения. : -)
Запомнившаяся версия потребовала O (n) вызовов, как вы предложили.
Кстати, число бинарных деревьев с n узлами равно n-му каталонскому числу .
Очевидные подходы к вычислению C n кажутся линейными по n, так что запомненная реализация countTrees
, вероятно, лучшая из возможных