在递归功能的挣扎中,我做错了什么

Hop*_*ppo 1 python recursion

我对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)

Jak*_*yer 5

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)那么您可能会非常难看