簡體   English   中英

python2.7中遞歸函數的執行順序

[英]the executed order of recursion function in python2.7

def fac(n):
    if n==1 or n==2  or n==3:
        print "i am calling fac(",n,")"
        return  n
    else:
        print "i am calling fac(",n,")"
        x=fac(n-1)+fac(n-2)+fac(n-3)
        return  x  

fac(6)的輸出是:

fac(6)
i am calling fac( 6 )
i am calling fac( 5 )
i am calling fac( 4 )
i am calling fac( 3 )
i am calling fac( 2 )
i am calling fac( 1 )
i am calling fac( 3 )
i am calling fac( 2 )
i am calling fac( 4 )
i am calling fac( 3 )
i am calling fac( 2 )
i am calling fac( 1 )
i am calling fac( 3 )
20

python2.7執行遞歸函數的規則是什么?
結果使我感到困惑,無法從計算樹中進行分析。 為什么結果不是其他形式?

python處理遞歸計算的規則是什么?

Python按照遇到調用指令的順序運行每個調用。 因此,從n=6fac頂部開始,它將到達以下行:

x=fac(n-1)+fac(n-2)+fac(n-3)

要做的第一件事是計算n-1=5 ,然后運行fac(5) -它再次從函數頂部開始。 它將到達相同的位置並調用fac(4) ,它將調用fac(3) -僅返回3。僅現在,它將計算n-2=2並運行fac(2) ,然后運行fac(1)和做加法。 現在fac(4)已經完成,我們回到了fac(5) ,我們繼續從fac(n-2)

如果您修改函數以跟蹤遞歸的深度,則可以將調用打印為樹狀結構,以便更輕松地了解發生了什么:

def fac(n, level=0):
    print '{}fac({})'.format(level*'\t', n)

    if n==1 or n==2  or n==3:
        return n
    else:
        x = fac(n-1, level+1) + fac(n-2, level+1) + fac(n-3, level+1)
    return x

給出:

fac(6)
   fac(5)
      fac(4)
          fac(3)
          fac(2)
          fac(1)
      fac(3)
      fac(2)
   fac(4)
      fac(3)
      fac(2)
      fac(1)
   fac(3)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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