如何在python中使用变量递归

时间:2015-06-29 08:13:24

标签: python recursion

我在python中学习递归。我写了一个程序,但它无法正常工作。我是python的初学者。我有两个函数 scrabbleScore() letterScore() scrabbleScore()还会调用 letterscore()。这是我的代码:

def letterScore( let ):
    if let in ['a','e','i','l','n','o','r','s','t','u']:
        return 1
    elif let in ['d','g']:
        return 2
    elif let in ['b','c','m','p']:
        return 3
    elif let in ['f','h','v','w','y']:
        return 4
    elif let=='k':
        return 5
    elif let in ['j','x']:
        return 8
    elif let in ['q','z']:
        return 10
    else:
        return 0

p = 0
def scrabbleScore( S ):
    if S == "":
        return 0
    else:
        global p
        p=p+letterScore(S[0])
        scrabbleScore(S[1:])
        return p

print "scrabbleScore('quetzal'):  25 ==", scrabbleScore('quetzal')
print "scrabbleScore('jonquil'):  23 ==", scrabbleScore('jonquil')
print "scrabbleScore('syzygy'):   25 ==", scrabbleScore('syzygy')
print "scrabbleScore('abcdefghijklmnopqrstuvwxyz'):  87 ==", scrabbleScore('abcdefghijklmnopqrstuvwxyz')
print "scrabbleScore('?!@#$%^&*()'):  0 ==", scrabbleScore('?!@#$%^&*()')
print "scrabbleScore(''):          0 ==", scrabbleScore('')    

3 个答案:

答案 0 :(得分:1)

我会将你的scrabbleScore重写为这样的

def scrabbleScore(S):
    def helper(S, p):
        if S == "":
            return p
        else:
            p += letterScore(S[0])
            return helper(S[1:], p)

    return helper(S, 0)

这就是你如何写它。 p被称为akkumulator,不应该是全局的(一般来说,应该避免全局变量)。我没有弄清楚为什么你的程序不起作用,但我会打印出正确的结果。

答案 1 :(得分:0)

它无法正常工作,因为您使用全局变量来存储中间结果。致电" scrabbleScore"第一次p值变为25,你需要重置它。

这里的解决方案是避免使用全局变量:

def scrabbleScore( S ):
    p = 0
    if S == "":
        return 0
    else:
        p = p + letterScore(S[0])
        p = p + scrabbleScore(S[1:])
        return p

答案 2 :(得分:0)

每次调用p后,您的变量scrabbleScore(S)应再次初始化为零。这将解决您的问题。例如:

print "scrabbleScore('quetzal'):  25 ==", scrabbleScore('quetzal')
p=0
print "scrabbleScore('jonquil'):  23 ==", scrabbleScore('jonquil')