python递归函数深度
这个程序使用插入排序递归排序列表... 有人可以让我明白'isort'是如何递归工作的,以及即使'isort'递归后'insert'如何运行,isort递归直到它已经完成了一次?python递归函数深度
def insertion(seq):
isort(seq,len(seq))
def isort(seq,k):
if k>1:
isort(seq,k-1)
insert(seq,k-1)
def insert(seq,k):
pos=k
while pos>0 and seq[pos]<seq[pos-1]:
(seq[pos],seq[pos-1])=(seq[pos-1],seq[pos])
pos=pos-1
看看isort(seq, k)
该功能可以确保最后k个元素进行排序
def isort(seq,k):
if k>1:
isort(seq,k-1)
// seq[k-1:] is sorted
insert(seq,k-1)
// the k'th item is now inserted in the correct place,
// so seq[k:] is sorted
为k=len(seq)
,seq[k:]
是平凡的排序(这是一个空列表) 和递归在每个步骤中减少k
1,从尾部到头部排序seq
正确我明白,它从头到尾排序列表,但我不明白的是'插入'函数即使当'isort'递归地减少k为0或1 if条件没有被满足,并且抱歉在编程中是一个新手,所以很愚蠢 –
我认为问题在于你不理解python语法:在if后面的两行是if,因为它们是缩进的。所以每次都运行 – Dotan
OK我最后一个问题,所以当if条件满足时,它首先调用'isort',然后'插入'或者它们一起调用。根据我的理解,插入将不会运行,除非递归'isort'调用完成完成执行。 –
不确定是否t他解释它,但相关:https://www.youtube.com/watch?v=ROALU379l3U –
嗯,这段代码确实是插入排序,但分配操作不必要地交换。 –
是它的不必要的,它只是一个递归的例子 –