递归平衡字符到第n度,Python递归

时间:2014-05-04 22:22:50

标签: python recursion balance

我正在研究一个问题,给定一个字符串,任何给定数量的'a'必须跟随'b'的两倍。这必须是递归的。例如:

abb("aabbbbabb")
>>>True
abb("aabbabbb")
>>>False

我的直觉是制作一个堆叠并将字母'a'推到堆栈中,每次看到两个'b'时,从堆栈中弹出'a'。相反,我决定更新'b'作为变量的位置和数量。假设第一个字母始终为'a',则应显示的'b'的数量由i + 2表示。

到目前为止,我有这个小问题:

def aabb(string, postion=None, i=None):
    if position is None:
        position = 0
    if i is None:
        i = 0
    if position != len(string):
        if string[position] == "a":
            i = i +2
            position = position +1
            return aabb(string[position], position, i)
        if string[position] =="b" and i >0:
            i = i - 1
            position = position +1
            return aabb(string[position], position, i)
        if string[position] == "a" and i != 0:
            print "False"
        if string[position] == "b" and i == 0:
            print "False"
    else:
        print "True"

我遇到的问题如下:

if position is None:
UnboundLocalError: local variable 'position' referenced before assignment

如果它是可选参数,我不确定我是如何引用它的?否则,我只是以完全错误的方式解决这个问题?感谢。

1 个答案:

答案 0 :(得分:0)

这是伪代码版本:

def abb(s):
    if s is empty:
        return True    # base case
    else:
        get number of leading "a"s                    # itertools.takewhile
        if number is 0:
            return False
        else:
            get twice that number of characters       # itertools.islice
            if they are all bs
                return abb(remainder of string)