遞歸排序及例題分析

遞歸算法:

簡而言之就是一種函數調用函數自身來完成算法設計的方法。如果一個函數f(x),可以通過調用自己來完成算法的設計,這種方法就稱爲遞歸算法。Fibonacci(斐波那契數列)便是典型的遞歸算法例子。
Fibonacci 數列的定義如下:

Fib(n) ={0,1,1,2,3,5,8,13,......}

第n項爲其前兩項之和,即Fib(n) =Fib(n-1)+Fib(n-2) n>2
代碼實現;

def Fibonacci(n):
    if n == 1:
        return 0
    elif n == 2:
        return 1
    else:
        return Fibonacci(n-1)+Fibonacci(n-2)
n = int(input("輸入:"))
print(Fibonacci(n))

關於遞歸問題,漢諾塔問題也是典型例題之一。在這裏首先簡述一下和爲漢諾塔問題:現有三根柱子 A,B,C,在柱子 A 上,
從上到下按照由小到大的順序放置了 n 個圓盤,每個圓盤都比它下面的圓盤小。現在,需要將 n 個圓盤從柱子 A 上移動到另外一根柱子 C 上,每次移動的時候必須保證小圓盤在大圓盤的上方。假定有n個圓盤,應該如何移動?
如果n=1時,只需要將A上面的圓盤直接移動到C即可。
如果n>1時,我們需要將A上面的n-1個圓盤,藉助C轉移到B,然後再將A上面的最後一個圓盤移動到C
最後,在將B上n-1個圓盤,藉助C轉移到A,而此時,就可以進入遞歸循。
代碼實現:

def  move(n,a,b,c):
    if n ==1:
        print(a,'-->',c)
    else:
        move(n-1,a,c,b) #A柱子上有n個盤子,將A上面的n-1個盤子,通過c,移動到b
        move(1,a,b,c)   #A柱子上最後的一個盤子,移動到c
        move(n-1,b,a,c) #b柱子上n-1個盤子,通過a,移動到c
    return  ‘ ’
print(move(3,'A','B','C'))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章