一、遞歸函數(shù)


函數(shù)是可以被調(diào)用的,且一個(gè)函數(shù)內(nèi)部可以調(diào)用其他函數(shù)。如果一個(gè)函數(shù)在內(nèi)部調(diào)用本身,這個(gè)函數(shù)就是一個(gè)遞歸函數(shù)。函數(shù)遞歸調(diào)用的過程與循環(huán)相似,而且理論上,所有的遞歸函數(shù)都可以寫成循環(huán)的方式,但是遞歸函數(shù)的優(yōu)點(diǎn)是定義簡(jiǎn)單,邏輯清晰。遞歸和循環(huán)都是一個(gè)重復(fù)的操作的過程,這些重復(fù)性的操作必然是需要有一定的規(guī)律性的。另外,很明顯遞歸函數(shù)也需要一個(gè)結(jié)束條件,否則就會(huì)像死循環(huán)一樣遞歸下去,直到由于棧溢出而被終止(這個(gè)下面介紹)。

可見,要實(shí)現(xiàn)一個(gè)遞歸函數(shù)需要確定兩個(gè)要素:

  • 遞歸規(guī)律

  • 結(jié)束條件

1. 實(shí)例:計(jì)算正整數(shù)n的階乘 n! = 1 * 2 * 3 * ... * n

循環(huán)實(shí)現(xiàn)

思路有兩個(gè):

  • 從1乘到n,需要額外定義一個(gè)計(jì)數(shù)器存放n當(dāng)前的值

  • 從n乘到1,無需額外定義計(jì)數(shù)器,直接對(duì)n進(jìn)行減1操作,直到n=0返回1結(jié)束

def fact(n):
    if n == 0:        return 1
    
    result = 1
    while n >
        
		

網(wǎng)友評(píng)論