python遞歸算法經(jīng)典實例 漢諾塔遞歸算法?
漢諾塔遞歸算法?1//河內(nèi)塔2#包括和酒店。H>3 void Hanoi(int n,char a,char b,char c)//這里表示在b列的幫助下將a列上的圖版移到c列4{if(1==n)
漢諾塔遞歸算法?
1//河內(nèi)塔
2#包括和酒店。H>
3 void Hanoi(int n,char a,char b,char c)//這里表示在b列的幫助下將a列上的圖版移到c列
4{if(1==n)//如果是圖版,將a列上的圖版移到c列
5{
6 Printf(%c-->%cn,a,c)
7}
8 else
9{
10 Hanoi n-1,a,c,b)//move n-1 plates on column a to column B with the column C
11 printf(%C-->%Cn“,a,C)//將a列的最后一塊板移到C列
12 Hanoi(n-1,B,a,C)//然后將B列的n-1板移到C
13}
14}
15 int main()
16{int n
17 printf輸入磁盤數(shù):”)
18 scanf(%d“,&n)
19 Hanoi(n,%a”,%B“,%C”)
20 return 0
21}
遞歸的主要思想是能夠重復(fù)一些操作,如簡單階乘、冪、回溯中的八皇后、數(shù)獨、漢諾塔和分形。
由于堆棧機制,一般遞歸可以保持一些變量處于歷史狀態(tài),例如返回x*Power。。。您提到過,但是有些問題可能很大或太深,需要盡可能避免遞歸,因為堆??赡軙绯?。另一個
問題是Python不支持尾部遞歸優(yōu)化
所以盡量避免遞歸。
Def power(x,n)
如果n< 0:
return 1
return x*power(x,n-1)
power(3,3)
3*power(3,2)
3*(3*power(3,1))
3*(3*power(3,0))
3*(3*1)),其中n=0,return 1
3*(3*3)
3*9
當函數(shù)參數(shù)n=0時,開始撤退到第一次通電結(jié)束。