如何递归读取列表中的所有字符?

时间:2016-04-21 21:21:07

标签: python recursion

我需要编写一个函数来递归读取文件中的所有字符并追加到列表中。该函数需要两个参数,即文件和列表。递归让我感到困惑。有关递归思考的任何提示我也很感激。 Bellow是我编写的用于打印列表字符的代码,没有递归。

def newChar(usrFile,usrList):

    for line in usrFile:
        for c in line:
            usrList.append(c)

    print(usrList)


def main():
    usrFile = open("input.txt",'r')
    usrList = []
    newChar(usrFile,usrList)



main()

结果:

['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', ' ', 'p', 'r', 'i', 'n', 't', ' ', 'a', 'l', 'l', ' ', 't', 'h', 'e', 's', 'e', ' ', 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r', 's', '.']

1 个答案:

答案 0 :(得分:2)

考虑递归的一种方法是尝试解决问题的一小部分,然后想象递归调用'神奇地'解决问题的其余部分。重要的是,你必须考虑当问题的其余部分无法解决时会发生什么;这称为基本情况

在这种情况下,我们可以在一次递归调用中解决的小部分是读取单个字符(字节)。如果文件中没有剩余字符,则会出现基本情况;当发生这种情况时,您不会向列表中添加任何内容,只返回已经构建的内容。

这个想法可以实现如下。

f = open('test_file.txt', 'r')
char_list = []

def read_rec(fh, chars):
    curChar = fh.read(1)
    if curChar: #returns False at the end of the file
        chars.append(curChar) #append to chars
        return read_rec(fh, chars) #recursively read the rest of the file
    return chars

print read_rec(f, char_list)

输出

['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', ' ', 'm', 'y', ' ', 'n', 'a', 'm', 'e', ' ', 'i', 's', ' ', 'G', 'a', 'r', 'r', 'e', 't', 't', '\n']