遞歸式方法可以被用于解決很多的計算機科學問題,因此它是計算機科學中十分重要的一個概念。
成都創(chuàng)新互聯(lián)云計算的互聯(lián)網(wǎng)服務提供商,擁有超過13年的服務器租用、達州服務器托管、云服務器、網(wǎng)站空間、網(wǎng)站系統(tǒng)開發(fā)經驗,已先后獲得國家工業(yè)和信息化部頒發(fā)的互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務許可證。專業(yè)提供云主機、網(wǎng)站空間、域名申請、VPS主機、云服務器、香港云服務器、免備案服務器等。
絕大多數(shù)編程語言支持函數(shù)的自調用,在這些語言中函數(shù)可以通過調用自身來進行遞歸。計算理論可以證明遞歸的作用可以完全取代循環(huán),因此在很多函數(shù)編程語言(如Scheme)中習慣用遞歸來實現(xiàn)循環(huán)。
計算機科學家尼克勞斯·維爾特如此描述遞歸:
遞歸的強大之處在于它允許用戶用有限的語句描述無限的對象。因此,在計算機科學中,遞歸可以被用來描述無限步的運算,盡管描述運算的程序是有限的。
python 2 遞歸函數(shù)和其它語言,基本沒有差別,只是不支持尾遞歸。無限遞歸最大值為固定的,但可以修改。
作者:黃哥
def Sum(m): #函數(shù)返回兩個值:遞歸次數(shù),所求的值 if m==1:return 1,m return 1+Sum(m-1)[0],m+Sum(m-1)[1]cishu=Sum(10)[0] print cishu def Sum(m,n=1): ... if m==1:return n,m ... return n,m+Sum(m-1,n+1)[1] print Sum(10)[0] 10 print Sum(5)[0] 5
遞歸的思想主要是能夠重復某些動作,比如簡單的階乘,次方,回溯中的八皇后,數(shù)獨,還有漢諾塔,分形。
由于堆棧的機制,一般的遞歸可以保留某些變量在歷史狀態(tài)中,比如你提到的return
x
*
power...,
但是某些或許龐大的問題或者是深度過大的問題就需要盡量避免遞歸,因為可能會棧溢出。還有一個問題是~python不支持尾遞歸優(yōu)化?。。。∷浴€是盡量避免遞歸的出現(xiàn)。
def
power(x,
n)
if
n
0:
return
1
return
x
*
power(x,
n
-
1)
power(3,
3)
3
*
power(3,
2)
3
*
(3
*
power(3,
1))
3
*
(3
*
(3
*
power(3,
0)))
3
*
(3
*
(3
*
1))
這里n
=
0,
return
1
3
*
(3
*
3)
3
*
9
27
當函數(shù)形參n=0的時候,開始回退~直到第一次調用power結束。