8--python之遞歸

遞歸的兩個條件
1、有調用函數自身的一個過程
2、有一個合理的結束條件

遞歸的特點:

必須有一個明確的結束條件,要不就會變成死循環了,最終撐爆系統
每次進入更深一層遞歸時,問題規模相比上次遞歸都應有所減少
遞歸執行效率不高,遞歸層次過多會導致棧溢出

寫一個求階乘的函數
第一種

def factorial(n):
	result=n
	for i in range(1,n):
		result*=1
	return result
	
number=int(input('請輸入一個正整數:'))
factorial(5)
print('%d的階乘爲%d'%(number,result))

在這裏插入圖片描述第二種

def factorical(n):
	if n==1:
		return 1
	else:
		return n*factorical(n-1)
number = int(input('請輸入一個正整數:'))
result=factorical(number)
print('%d的階乘是:%d' %(number,result))

在這裏插入圖片描述斐波那契數列的迭代實現

def fab(n):
	n1=1
	n2=1
	n3=1
	
	if n<1:
		print("輸入有誤!")
		return -1
	
	while(n-2)>0:
		n3=n2+n1
		n1=n2
		n2=n3
		n-=1
		
	return n3

result=fab(20)
if result != -1:
	print('總共有%對小兔子誕生' % result)

斐波那契數列的遞歸實現

def fab(n):
	if n<1:
                print("輸入有誤!")
		return -1
	
	if n==1 or n==2:
		return 1
	else:
		return fab(n-1) + fab(n-2)
		
result=fab(20)
if result != -1:
	print('總共有%對小兔子誕生' % result)

知道漢諾塔層數,求放置步驟(用遞歸)

def hanoi(n,x,y,z):
        if n==1:
                print(x,'-->',z)
        else:
                hanoi(n-1,x,z,y)#將前n-1個盤子從x移動到y上
                print(x,'-->',z)#將最底下的最後一個盤子從x移到上
                hanoi(n-1,y,x,z)#將y上的n-1個盤子移動到z上
	
n=int(input('請輸入漢諾塔的層數:'))
hanoi(n,'X','Y','Z')
	

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章