擅长:python、mysql、java
<p>下面是一个递归生成器函数:</p>
<pre><code>def nums(n):
if n:
yield from (int(f"{n}{num}") for num in nums(n-1))
yield n
yield from nums(n-1)
[*nums(1)]
# [1]
[*nums(2)]
# [21, 2, 1]
[*nums(3)]
# [321, 32, 31, 3, 21, 2, 1]
[*nums(4)]
# [4321, 432, 431, 43, 421, 42, 41, 4, 321, 32, 31, 3, 21, 2, 1]
</code></pre>
<p>或者使用<a href="https://docs.python.org/3/library/itertools.html#itertools.combinations" rel="nofollow noreferrer">^{<cd1>}</a>方法:</p>
<pre><code>from itertools import combinations
def nums(n):
for l in range(n, 0, -1):
for c in combinations(range(n, 0, -1), l):
yield int("".join(map(str, c)))
[*nums(2)]
# [21, 2, 1]
[*nums(3)]
# [321, 32, 31, 21, 3, 2, 1]
[*nums(4)]
# [4321, 432, 431, 421, 321, 43, 42, 41, 32, 31, 21, 4, 3, 2, 1]
</code></pre>