使用递归检查数组是否有序时,结果始终为yes的错误排查
问题分析与修复方案
核心错误
你犯的关键错误是判断的是函数对象本身,而非函数执行后的返回值:
- 你调用了
isSorted(arr)但没有把返回结果存下来; - 后续的
if isSorted:里,isSorted是函数的引用(对象),在Python中所有非空的对象都会被判定为True,所以不管数组是否有序,都会打印yes。
修复后的代码
你可以直接在判断条件中调用函数,或者先保存返回值再判断:
方式一:直接在判断中调用函数
def isSorted(arr): n = len(arr) if n == 0 or n == 1: return True elif arr[n-2] > arr[n-1]: return False return isSorted(arr[0:n-1]) arr = [1,9,9,4,5] if isSorted(arr): # 直接使用函数的返回值进行判断 print("yes") else: print("no")
方式二:先保存返回值再判断
def isSorted(arr): n = len(arr) if n == 0 or n == 1: return True elif arr[n-2] > arr[n-1]: return False return isSorted(arr[0:n-1]) arr = [1,9,9,4,5] sorted_result = isSorted(arr) # 保存函数返回结果 if sorted_result: print("yes") else: print("no")
这样修改后,就能正确根据数组是否有序输出对应的结果了。
内容的提问来源于stack exchange,提问作者Sanyam Chandak
相关产品推荐
相关产品推荐

