使用递归来查找基本树7中的最大节点数

时间:2016-05-19 05:02:13

标签: python recursion

第一次在这里发帖。自学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)...... 对不起,如果这是非常直接的,但我无法解决如何以递归方式解决这个问题。

提前感谢您的帮助。

2 个答案:

答案 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()次计算