我是一個相對較新的程式員。
我想了解為什么 quick_sort() 被遞回呼叫兩次。根據我的理解,最后一行不會被執行。
這條線不應該是可達的:quick_sort(array, pi 1, high)
# Function to perform quicksort
def quick_sort(array, low, high):
if low < high:
# Find pivot element such that
# element smaller than pivot are on the left
# element greater than pivot are on the right
pi = partition(array, low, high)
# Recursive call on the left of pivot
quick_sort(array, low, pi - 1)
# Recursive call on the right of pivot
quick_sort(array, pi 1, high)
uj5u.com熱心網友回復:
遞回呼叫的作業方式與簡單的函式呼叫沒有什么不同。
考慮這個函式f,它進行兩次呼叫,一次呼叫函式a,一次呼叫函式b:
def f(n):
if n > 0:
a()
print(n)
b()
def a():
print(' a')
def b():
print(' b')
f(7)
當我們呼叫函式f時,它會先呼叫a(),然后當呼叫完成時,它會呼叫print(n),然后當呼叫完成時,它會呼叫b()。輸出:
a
7
b
遞回呼叫和非遞回呼叫之間沒有區別。函式呼叫始終只是函式呼叫;遞回呼叫只是一個函式呼叫,其中被呼叫的函式恰好與呼叫函式具有相同的名稱。
這是一個例子:
def f(m, n, depth=0):
if m < n:
mid = (m n) // 2
f(m, mid, depth 1)
print(' '*depth, mid)
f(mid 1, n, depth 1)
f(0,15)
當我們呼叫函式f時,它會先呼叫f(m, mid, depth 1),然后當呼叫完成時,它會呼叫print(' '*depth, mid),然后當呼叫完成時,它會呼叫f(mid 1, n, depth 1)。
輸出:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/507857.html
下一篇:根據第一個ID查詢獲取遞回記錄
