2個遞歸經典的例子
先來一個入門的:
上初中學習數列求和什麼的時候我們就學過高斯的計算1到100的自然數的和的經典課文,那麼如果我們現在用程序的話該怎麼來做呢?
自然是循環來做這件事。
如果不用循環怎麼做呢?
def sum(first, end):
if end == 1:
return first
elif end > 1:
return sum(first + end, end-1)
print(sum(1,100))
結果是5050,根當時高斯算出來的結果是一樣的。
當然了,這個sum函數還能算任意的1到任何的n的自然數之和。
斐波那契數列
第一項是1,第二項是1,第三項是前倆項的和,依次類推。
表達式:F0=1,F1=1,F2=2,F3=3, …..Fn = Fn-1+Fn-2
實際的樣子:1,1,2,3,5,8,13,21…….
如果想得到第N項的值我們該如何做呢?
def fib(n):
if n == 1:
return 1
elif n == 2:
return 1
elif n > 2:
return fib(n-1)+fib(n-2)
這樣的話我們就可以調用fib函數來算出第n項的值。
更有意思的就是漢諾塔了,
有3個杆子,有一個杆子上面套着從小到大的一排圓盤,要想把一個杆子上的所有圓盤都移動到另一個杆子上,條件是圓盤必須是大的在下面,小的在上面。要像將圓盤移動到另一個杆子上所用的最短的步數。
def move(n, A, B, C):
if(n == 1):
print(A, '->', C)
else:
move(n-1, A, C, B)
move(1, A, B, C)
move(n-1, B, A, C)
move(3, 'A', 'B', 'C')
結果如下
A->C
A->B
C->B
A->C
B->A
B->C
A->C
是不是很神奇。