我是 Python 的新手,我知道递归是一个需要掌握的重要概念。我一直在尝试各种脚本来锻炼我的知识,并提出了以下脚本来模拟彩票抽奖,您只需从 49 个数字中抽取 6 个,然后将它们与另外 6 个进行比较,看看您是否中奖。尽管递归函数采用另一个函数的值,但我正在努力。
我确信它会很简单,但我自己无法理解。
到目前为止,这是我的代码:
from random import randint
def drawSix():
six = []
while len(six) < 6:
a = randint(1,49)
if a not in six:
six.append(a)
return sorted(six)
def lottery(draw,ticket):
if draw == ticket:
return 'win'
return lottery(drawSix(),drawSix())
我用 lottery(drawSix(),drawSix()) 调用函数
并递归地得到以下内容。
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
lottery(drawSix(),drawSix())
File "/Users/johnhopkins/Desktop/lottery.py", line 14, in lottery
return lottery(drawSix(),drawSix())
请您参考如下方法:
def lottery(draw,ticket):
if draw == ticket:
return 'win'
return lottery(drawSix(),drawSix())
您实际生成两张相同门票的几率非常大,远远超过 1000,这是 Python 的最大堆栈大小。
您需要迭代地执行此操作以避免破坏堆栈。
def lottery(draw,ticket):
while draw != ticket:
draw, ticket = drawSix(), drawSix()
return "win"
请注意,这有一个非常丑陋的 O(n) of O(inf) 如果你运气不好并且仍然没有找到获胜对,你可能会永远运行它
