递归函数内部的两个调用



我是一个相对较新的程序员。

我想了解为什么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

最新更新