簡體   English   中英

遞歸 function 內的兩個調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM