递归创建具有二项式系数的树
Recursively creating a tree with binomial coefficient
我正在尝试用整数递归填充树(如下面的 link 所示)。但是我不明白如何使用递归解决归纳步骤。
PS。我已经创建了递归函数来计算二项式系数
提前致谢!
说明递归步骤的伪代码
TreeNode getRootOfSomeFancyTree(n)
TreeNode root = new TreeNode()
if(n == 1) return root
else for(i = 0; i < n; i++)
//not sure of correct way to multiply an integer by a tree in your application
int x = binomialCoefficient(n, i) * i
//anyway, recurring is easy and safe provided x < n
TreeNode subTree = getRootOfSomeFancyTree(x)
//build the tree
root.addChild(subTree)
endfor return root
link 图片中的数学符号有点晦涩。但是您想几乎完全实现它。它是这样说的:
Node buildTree(n) {
Let tree be a new Node (with no children)
For i from 0 to n - 1
Let b = binomial(n, i)
for b times:
Add buildTree(i) as a child of tree
return tree
}
晦涩的部分是,在这个“树数学”中乘以某个整数 k 意味着“将图重复 k 次”,而求和意味着“将所有作为子节点添加”到隐式父节点。这个父级是表达式的值。
这里有一个开发提示。在每个节点中存储一个唯一的整数作为标签。一旦你开始工作,然后编写一个打印出 DOT 语言的小树步行器。当我为 n=3 这样做时,我得到:
graph {
0 -- 1
2 -- 3
0 -- 2
4 -- 5
0 -- 4
6 -- 7
0 -- 6
8 -- 9
10 -- 11
8 -- 10
12 -- 13
8 -- 12
0 -- 8
14 -- 15
16 -- 17
14 -- 16
18 -- 19
14 -- 18
0 -- 14
20 -- 21
22 -- 23
20 -- 22
24 -- 25
20 -- 24
0 -- 20
}
您可以使用在线 GraphViz 查看它的外观 here。
我正在尝试用整数递归填充树(如下面的 link 所示)。但是我不明白如何使用递归解决归纳步骤。
PS。我已经创建了递归函数来计算二项式系数
提前致谢!
说明递归步骤的伪代码
TreeNode getRootOfSomeFancyTree(n)
TreeNode root = new TreeNode()
if(n == 1) return root
else for(i = 0; i < n; i++)
//not sure of correct way to multiply an integer by a tree in your application
int x = binomialCoefficient(n, i) * i
//anyway, recurring is easy and safe provided x < n
TreeNode subTree = getRootOfSomeFancyTree(x)
//build the tree
root.addChild(subTree)
endfor return root
link 图片中的数学符号有点晦涩。但是您想几乎完全实现它。它是这样说的:
Node buildTree(n) {
Let tree be a new Node (with no children)
For i from 0 to n - 1
Let b = binomial(n, i)
for b times:
Add buildTree(i) as a child of tree
return tree
}
晦涩的部分是,在这个“树数学”中乘以某个整数 k 意味着“将图重复 k 次”,而求和意味着“将所有作为子节点添加”到隐式父节点。这个父级是表达式的值。
这里有一个开发提示。在每个节点中存储一个唯一的整数作为标签。一旦你开始工作,然后编写一个打印出 DOT 语言的小树步行器。当我为 n=3 这样做时,我得到:
graph {
0 -- 1
2 -- 3
0 -- 2
4 -- 5
0 -- 4
6 -- 7
0 -- 6
8 -- 9
10 -- 11
8 -- 10
12 -- 13
8 -- 12
0 -- 8
14 -- 15
16 -- 17
14 -- 16
18 -- 19
14 -- 18
0 -- 14
20 -- 21
22 -- 23
20 -- 22
24 -- 25
20 -- 24
0 -- 20
}
您可以使用在线 GraphViz 查看它的外观 here。