Skip to main content
 首页 » 编程设计

python之与递归函数作斗争,我做错了什么

2025年05月04日14bluestorm

我是 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) 如果你运气不好并且仍然没有找到获胜对,你可能会永远运行它