Python 递归程序
我刚开始接触编程,之前是学数学的,对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
我觉得这个问题挺有意思的,所以我尝试了一下找解决办法。根据我所理解的,这个解决方案应该符合原问题的要求。
#!/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
函数的单元测试中包含的数字是这个问题的正确结果,那么这个解决方案应该是准确的。当然,欢迎大家提出反馈意见。