第一次在这里发帖。自学python并且如何使用递归来解决以下问题。 我们有一家公司,每位员工最多有7份报告。给定组织的深度x,找到包括CEO在内的最大员工数。这基本上是找到二叉树的最大节点数,除了基数2,我们有基数7.
我能够使用公式(b **(d + 1))/(b-1)线性地求解它,其中b是基数,d是树的深度。
def MaxNodes(d):
minions = ((7**(d+1)) - 1) / 6
return minions
我也迭代地解决了它:
def answer(x):
minions = 1
for levels in range(x):
if (levels == 0):
minions = 7
else:
minions += (minions * 7)
return minions + 1
所以我们在0级中几乎有值1,从1级开始,我们从值7开始并继续乘以7并添加到之前的结果: 1 +(7x1)+(7x7)+(49x7)...... 对不起,如果这是非常直接的,但我无法解决如何以递归方式解决这个问题。
提前感谢您的帮助。
答案 0 :(得分:0)
这是一个简单的递归实现:
def nodes(d):
if d == 0:
return 1
else:
return 1 + 7 * nodes(d - 1)
print [nodes(i) for i in range(5)] # [1, 8, 57, 400, 2801]
深度作为参数传递,当它达到0时,函数返回1,从而停止递归。否则,该函数将调用自身以便将数字设置为较低级别,将结果乘以7并将当前级别添加到其中。
答案 1 :(得分:0)
如果您想以递归方式找到7**x
:
def max_siblings(depth, degree=7, total=1):
"""How many siblings maximum at the given *depth*."""
return max_siblings(depth-1, degree, total*degree) if depth else total
如果您想以递归方式找到((7**(depth+1)) - 1) // 6
:
def max_nodes(depth, degree=7, total=1):
return max_nodes(depth-1, degree, total+max_siblings(depth)) if depth else total
示例:
for depth in range(5):
print(max_nodes(depth))
输出:
1
8
57
400
2801
您可以使用@lru_cache(maxsize=None)
decorator
max_siblings()
次计算