2017-10-09 55 views
-1
def choose (x, y): 
    if y > x: 
     print ("False") 
    elif y == 0 or y == x: 
     return 1 
    elif y == 1: 
     return x 
    else: 
     if (x-y) > y: 
      biggest = x-y 
      smallest = y 
     else: 
      biggest = y 
      smallest = x-y 
     resultatet = x * choose (x-1, biggest) 
    res = resultatet // smallest 
    return res 

我的功能與任何X輸入我插入但更大的Y輸入像8000例如我越來越的兩個數字蟒教師3

File "/home/nazel607/labb3b_2.py", line 20, in choose 
resultatet = x * choose (x-1, biggest) 
    File "/home/nazel607/labb3b_2.py", line 3, in choose 
if y > x: 
RuntimeError: maximum recursion depth exceeded in comparison 

完美的工作有沒有一種方法可以讓我克服這個問題還是因爲Python的限制而無法實現?除了增加限制還有另一種方法嗎?

+0

嗨。你有興趣找到一種不同的方法來計算這個值嗎?或者你想知道如何實現這個特定的算法,而不會遇到這種限制? – jwg

+0

@jwg嗨,我更感興趣的是找到一種方法來使用這個特定的算法,並克服了限制的問題 –

+0

你見過[this](https://stackoverflow.com/questions/8177073/python-maximum-recursion -depth-超標)? – RolfBly

回答

2

似乎可以擺脫遞歸的:

def choose2(x, y): 
    if y > x: 
     raise ValueError() 

    if y == 0 or y == x: 
     return 1 

    if y == 1: 
     return x 

    result = 1 
    while y != x: 
     big, small = max(x-y, y), min(x-y, y) 
     result *= x // small 
     x -= 1 
     y = big 
    return result 

我已經在幾個例子進行了測試

for x, y in [ 
    (4, 2), 
    (17, 9), 
    (125, 79), 
    (8005, 13), 
    (9005, 13), 
    # (19005, 7004) # exceeds max recursion depth on my machine 
]: 
    assert choose(x, y) == choose2(x, y) 

似乎工作正常。

-1

你是不是退出程序...

def choose (x, y): 
    if y > x: 
     print ("False") 
     return 
    # ...rest of your program 
+0

你是對的,但即使在編輯後我也得到完全相同的問題 –

+0

Python阻止你遞歸得太深。查看'https:// docs.python.org/3/library/sys.html#sys.setrecursionlimit'。 Python不會執行尾遞歸 – ssm