Python递归程序

时间:2010-05-09 18:38:57

标签: python recursion

我在编程方面相对较新,因为我受过数学家的教育而且没有Python经验。我想知道如何在Python中解决这个问题,因为我自己正在研究一个数学问题:

程序要求正整数m。如果m的形式为2 ^ n-1,则返回T(m)= n * 2 ^ {n-1}。否则,它将m写入形式2 ^ n + x,其中-1< x< 2 ^ n,并返回T(m)= T(2 ^ n-1)+ x + 1 + T(x)。最后它输出答案。

1 个答案:

答案 0 :(得分:0)

我认为这是一个很好的问题所以我尝试了一个解决方案。据我所知,这满足了原问题中的参数。

#!/usr/bin/python

import math

def calculate(m: int) -> int:
    """
    >>> calculate(10)
    20
    >>> calculate(100)
    329
    >>> calculate(1.2)
    >>> calculate(-1)
    """
    if (m <= 0 or math.modf(m)[0] != 0):
        return None
    n, x = decompose(m + 1)
    if (x == 0):
        return n * 2**(n - 1)
    else:
        return calculate(2**n - 1) + x + 1 + calculate(x)


def decompose(m: int) -> (int, int):
    """
    Returns two numbers (n, x), where
    m = 2**n + x and -1 < x < 2^n
    """
    n = int(math.log(m, 2))
    return (n, m - 2**n)


if __name__ == "__main__":
    import doctest
    doctest.testmod(verbose = True)

假设calculate函数的单元测试中包含的数字是问题的正确结果,则此解决方案应该是准确的。当然,反馈是最受欢迎的。