[英]Two calls inside a recursive function
我是一個相對較新的程序員。
我想了解為什么 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)
遞歸調用的工作方式與簡單的 function 調用沒有什么不同。
考慮這個 function f
,它進行兩次調用,一次調用 function a
和一次調用 function b
:
def f(n):
if n > 0:
a()
print(n)
b()
def a():
print(' a')
def b():
print(' b')
f(7)
當我們調用 function f
時,它會首先調用a()
,然后當調用完成時,它會調用print(n)
,然后當調用完成時,它會調用b()
。 Output:
a
7
b
遞歸調用和非遞歸調用之間沒有區別。 function 調用始終只是 function 調用; 遞歸調用只是一個 function 調用,其中被調用的 function 恰好與調用 function 具有相同的名稱。
這是一個例子:
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)
當我們調用 function f
時,它會首先調用f(m, mid, depth+1)
,然后當調用完成時,它會調用print(' '*depth, mid)
,然后當調用完成后,它將調用f(mid+1, n, depth+1)
。
Output:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.