python 如何递归地列出一个数的所有可能的和[关闭]

uemypmqf  于 2023-05-16  发布在  Python
关注(0)|答案(1)|浏览(70)

已关闭,此问题需要更focused。目前不接受答复。
**想改善这个问题吗?**更新问题,使其仅通过editing this post关注一个问题。

16天前关闭
Improve this question
给定一个自然数N,我需要获得并显示将这个数表示为自然数之和的所有可能的不同方式的数量(例如,1 + 2和2 + 1是分解数3的相同方式)。
如何使用递归函数解决问题?

vuktfyat

vuktfyat1#

应该可以...

def find_ways(n, max_n):
    if n == 0:
        return [[]]
    ways = []
    for i in range(1, min(n, max_n) + 1):
        for way in find_ways(n - i, i):
            ways.append([i] + way)
    return ways

n = int(input("Enter a natural number: "))
ways = find_ways(n, n)
print("All possible ways of representing", n, "as a sum of natural numbers:")
for way in ways:
    if way[0] != n:
        print(f"{str(way).replace('[', '').replace(']', '').replace(',', ' +')} = {n}")
    else:
        print(f"{n} + 0 = {n}")

find_ways()函数有两个参数:n是要表示为自然数之和的数,并且max_n是可以在每个和中使用的最大数。该函数返回将n表示为自然数之和的所有可能方式的列表。
该函数通过尝试所有可能的和值来工作,这些值必须在1和n之间。该函数递归地找到所有可能的方法来表示n的剩余部分,其中仅使用数字1直到n的值。
您可以使用任何自然数和任何最大和来调用此函数。例如,要找到将5表示为仅使用最多3的数字的自然数之和的所有可能方法,您可以调用:max_ways = find_ways(5, 3)

相关问题