2

我正在尝试编写一个函数来检查字符串中的字符是否使用递归进行排序。这就是我想出的:

def is_sorted(x,i):
    if i >= len(x):
        return True
    elif x[i] <= x[i-1]:
        return False
    else:
        is_sorted(x,i+1)

我用这些来测试我的功能:

x = "abcadef"
y = "aabcdef"
z = "abcdef"
print is_sorted(x, 1)
print is_sorted(y, 1)
print is_sorted(z, 1)

我希望得到 False、False、True,但结果却是 None、False、None。为什么?:(

4

2 回答 2

10

您没有在最后一个else子句中返回任何内容。因此结果。

def is_sorted(x,i):
    if i >= len(x):
        return True
    elif x[i] <= x[i-1]:
        return False
    else:
        return is_sorted(x,i+1)

演示:

>>> def is_sorted(x,i):
...     if i >= len(x):
...         return True
...     elif x[i] <= x[i-1]:
...         return False
...     else:
...         return is_sorted(x,i+1)
... 
>>> x = "abcadef"
>>> y = "aabcdef"
>>> z = "abcdef"
>>> print is_sorted(x, 1)
False
>>> print is_sorted(y, 1)
False
>>> print is_sorted(z, 1)
True
>>> 
于 2013-10-21T15:26:12.087 回答
3

您需要返回函数以将其传递到递归链

def is_sorted(x,i):
    if i >= len(x):
        return True
    elif x[i] <= x[i-1]:
        return False
    else:
        return is_sorted(x,i+1) # <---- Here
于 2013-10-21T15:28:20.040 回答