Algorithm 重复关系:写入重复关系

Algorithm 重复关系:写入重复关系,algorithm,recursion,binary-tree,catalan,Algorithm,Recursion,Binary Tree,Catalan,我正试图为这个算法编写一个递归关系。但是我把“根”变量弄糊涂了。有人能帮我或给我推荐一个更好的递归算法来计算可能有n个节点的二叉树的数量吗 Algorithm countTrees(n) { if(n<=1) then return 1 else { sum = 0 for root=1 to root<= n do { left = countTrees(root-1) right =

我正试图为这个算法编写一个递归关系。但是我把“根”变量弄糊涂了。有人能帮我或给我推荐一个更好的递归算法来计算可能有n个节点的二叉树的数量吗

Algorithm countTrees(n) {
    if(n<=1) then return 1
    else {
        sum = 0
        for root=1 to root<= n do {
            left = countTrees(root-1)
            right = countTrees(n-root)
            sum = sum+(left*right)
        }
        return sum
    }
}
算法计数树(n){

如果(n您的代码已经是二叉树数的递归关系,只是表示为一个算法。我猜您被卡住了,因为您在一个循环上有一个求和。这里是标准的数学表示法——循环值从1..n更改为0..n-1以更标准:

C(0) = C(1) = 1
C(n) = sum(C(i) * C(n-i-1) for i = 0...n-1)
手写(或使用LaTeX)可以使用求和符号,而不是
sum
,但逻辑上是相同的

这是循环关系(尽管通常不会明确列出
C(1)
案例),并且链接的Wikipedia页面还包括循环关系的封闭形式解决方案及其正确性证明