我对python很新,并且理解递归是一个需要掌握的重要概念.我一直在尝试各种脚本来运用我的知识,并提出以下脚本来模拟抽奖,你只需从49个数字中抽取六个,然后将它们与另外六个进行比较,看看你是否赢了.我正在努力使用递归函数来获取另一个函数的值.
我相信它会很简单,但我自己也无法理解.
到目前为止,这是我的代码:
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())
Run Code Online (Sandbox Code Playgroud)
我用彩票调用函数(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())
Run Code Online (Sandbox Code Playgroud)
def lottery(draw,ticket):
if draw == ticket:
return 'win'
return lottery(drawSix(),drawSix())
Run Code Online (Sandbox Code Playgroud)
实际生成两个相同票证的几率非常大,超过1000,这是Python的最大堆栈大小.
您需要迭代地执行此操作以避免破坏堆栈.
def lottery(draw,ticket):
while draw != ticket:
draw, ticket = drawSix(), drawSix()
return "win"
Run Code Online (Sandbox Code Playgroud)
请注意,如果您运气不好并且仍未找到获胜对O(n),O(inf)那么您可能会非常难看