字符串中的第一个索引外观递归

时间:2014-04-17 20:59:21

标签: python python-3.x recursion

我试着编写一个递归函数,它将字符串和char作为输入。该函数返回字符串中char的第一个索引外观。如果char没有出现,则返回None。 我只有返回无问题。在我的情况下,当char不在字符串中时,函数会抛出错误,有任何建议吗?

def char_first_index(s,c):
    if len_rec(s)==0:
        return None
    if s[0]==c:
        return  0
    return 1+ char_first_index(s[1:],c)

3 个答案:

答案 0 :(得分:3)

您正在每次迭代时创建一个新切片,并且必须为每次递归添加1。相反,递归索引:

def char_first_index(s, c, index = 0):
    if len(s) == index:
        return None
    if s[index] == c:
        return index
    return char_first_index(s, c, index + 1)

答案 1 :(得分:1)

如果字符不在输入中,则您的函数会尝试执行1+None,因此会出错。试试这个:

def char_first_index(s,c):
    if len_rec(s)==0:
        return None
    if s[0]==c:
        return  0
    answer =  char_first_index(s[1:],c)
    if answer is not None:
        return 1+answer
    else:
        return answer

答案 2 :(得分:1)

首先我假设len_rec是一个获取字符串长度的递归函数;你还没写过,所以我把它改成len()进行测试。

其次,我不确定这个函数应该如何处理不在字符串中的字符,因为这意味着尝试将None添加到数字中。

这是一个修改过的函数,它仍然使用了你的计数概念,但处理了None被返回的情况:

def char_first_index(s,c):
    if len(s)==0:
        return None
    elif s[0]==c:
        return 0
    else:
        count = char_first_index(s[1:], c)
        if count != None:
            return count + 1
        else:
            return None