我是一个相对较新的程序员。
我想了解为什么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)
考虑这个函数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