【发布时间】:2021-10-10 22:04:46
【问题描述】:
我正在尝试用整数递归填充树(如下面的链接所示)。但我不明白如何使用递归解决归纳步骤。
PS。我已经创建了递归函数来计算二项式系数
提前谢谢你!
【问题讨论】:
我正在尝试用整数递归填充树(如下面的链接所示)。但我不明白如何使用递归解决归纳步骤。
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
【讨论】:
链接图片中的数学符号有点晦涩。但是你想几乎完全实现它。它是这样说的:
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 查看它的外观。
【讨论】: