递归函数:“NoneType对象不可迭代”

时间:2014-11-17 17:21:30

标签: python python-3.x recursion nonetype

我试图理解一个递归函数,为了做到这一点,我觉得我需要为自己创建一个更小的例子。但是,我自己的代码却给我一个NoneType错误。我的功能并没有真正的目的,我只是想知道错误发生的原因?

def recursive(seq):
    if not seq:
        return [seq]
    else:
        seq2=seq[1:]
            print('seq2= ',seq2)
            print('Type seq2 = ',type(seq2))
        for i in recursive(seq2):
            print('hi')

输入:

recursive('123')

输出:

seq2=  23
Type seq2 =  <class 'str'>
seq2=  3
Type seq2 =  <class 'str'>
seq2=  
Type seq2 =  <class 'str'>
hi
Traceback (most recent call last):
    File "<pyshell#12>", line 1, in <module>
        recursive('123')
    File "C:/Python34/myreqursive(del).py", line 8, in recursive
        for i in recursive(seq2):
    File "C:/Python34/myreqursive(del).py", line 8, in recursive
        for i in recursive(seq2):
TypeError: 'NoneType' object is not iterable

1 个答案:

答案 0 :(得分:2)

您的else分支没有返回任何内容,因此会提供默认返回值None

而不是仅仅打印,至少返回递归结果:

def recursive(seq):
    if not seq:
        return [seq]
    else:
        seq2=seq[1:]
        print('seq2= ',seq2)
        print('Type seq2 = ',type(seq2))
        recursive_result = recursive(seq2)
        for i in recursive_result:
            print('hi')
        return recursive_result