[英]Calling a function recursively more than once
我是編程新手,請為我解釋以下遞歸函數的工作原理。 該函數被遞歸調用兩次,第一次遞歸調用后的語句是否會執行?
void sort(int low, int high) {
int mid;
if(low < high) {
mid = (low + high) / 2;
sort(low, mid);
sort(mid+1, high);
merging(low, mid, high);
} else {
return;
}
}
void main()
{
sort(0, 10);
}
請參閱堆棧溢出的遞歸示例鏈接。 遞歸函數示例
您想在代碼中實現什么? 遞歸函數應調用函數本身,並且應具有停止條件,否則它將陷入無限循環。 您編寫的代碼兩次調用了相同的函數,這是不正確的。 您應該在停止條件下調用一次該函數。
讓我們逐行走
if(low < high)
由於0 <10,則mid將為5:因為mid = (low + high) / 2;
。 sort(mid+1, high);
這次將再次調用您的代碼排序,因為低= 1,高也= 1。 將其視為堆棧,首先推送sort(0,10)
然后=> sort(0,5)
然后=> sort(0,2)
然后=> sort(0,1)
然后=> sort(0,0)
現在,既然sort(0,0)
完成執行,它將從堆棧中刪除,並且sort(0,1)
將繼續。 所以應該看起來像這樣
sort(0,10)
=> sort(0,5)
=> sort(0,2)
=> sort(0,1)
再在第五行sort(0,1)
調用sort()
在那里,所以再次排序將被推到這個堆棧:
sort(0,10)
=> sort(0,5)
=> sort(0,2)
=> sort(0,1)
=> sort(1,1)
這將繼續,最后對sort(0,10)
的調用將完成執行,您將獲得所需的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.