2017-07-02 13 views
0

このプログラムは、挿入ソートを使用してリストを再帰的にソートします... 'isort'が再帰的に動作する方法と 'isort'再帰の後でも 'insert'それは一度完全に走った?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 
+0

t彼はそれについて説明しますが、関連しています:https://www.youtube.com/watch?v=ROalU379l3U –

+0

ええ、このコードは確かに挿入ソートですが、割り当て操作は不必要にスワップに置き換えられます。 –

+0

yeaその不必要な、ちょうど再帰の例 –

答えて

0

(それは空のリストです)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)のためにソートされていることを確認する をisort(seq, k)

を見て、再帰は各ステップでkを1減らし、seqを尾から頭にソートする

+0

正しい私はそれが尾から頭へのリストを並べ替えることを理解するが、 'isort'がkを0または1に減らしても 'insert' if条件が満たされておらず、プログラミングで初心者であることがとても愚かであることをお詫びします。 –

+0

私は、Pythonの構文を理解できないという問題があると思います。だからいつも両方とも実行する – Dotan

+0

私は最後の質問とクマを持っているので、条件が満たされると、最初に 'isort'を呼び出してから 'insert'するか、一緒に呼び出されます。私の理解では、再帰的な 'isort'呼び出しが完全に実行を終了しない限り、insertは実行されません。 –