python 遞迴演算法

2021-09-12 10:53:54 字數 1804 閱讀 6650

一、遞迴演算法三定律

二、通過求列表和分析遞迴演算法

**如下:

def list_sum(num_list):

if len(num_list) == 0:

return 0

elif len(num_list) == 1:

return num_list[0]

else:

return num_list[0] + list_sum(num_list[1:])

分析:

1、基本情況

列表求和的基本情況為列表長度為1,0為異常。

2、改變狀態

假設求和列表為[1, 2, 3, 4, 5]可分解為1 + (2+(3+(4+(5)))),使列表長度變小,最後變為基本情況列表長度為1

3、 呼叫函式本身

最後一行呼叫函式本身完成遞迴演算法

三、 遞迴演算法應用場景---> 進製轉換

10進製轉換為其它進製字串

雖然用stack可以實現,但作為乙個程式設計師,與生俱來的懶和優雅,遞迴是我們的不二選擇。

stack實現:

from pythonds.basic import stack

def base_convert(num, base):

num_str = '0123456789abcdef'

num_stack = stack()

while num > 0:

num_stack.push(num % base)

num = num // base

new_num = ""

while not num_stack.isempty():

new_num += num_str[num_stack.pop()]

return new_num

遞迴方法實現:

def base_convert_recursion(num, base):

str_num = '0123456789abcdef'

if num < base:

return str_num[num]

else:

return base_convert_recursion(num // base, base) + str_num[num % base]

四、 遞迴演算法應用--->漢諾塔

漢諾塔,使用遞迴完成漢諾塔特別簡單

思路:1、n = 1 時直接把a-->c;

2、n > 1時,把n-1移動到b,再把a中的n移動到c;

3、b上的n-1個移動到c

比如n=3,(a-->c, a-->b, c-->b n-1到b), a-->c(最大的移動到c),b-->a, b-->c, a-->c(n-1 的 b-->c)

**如下:

def hanoi(n, a, b, c):

if n == 1:

print(a + '---->' + c)

else:

hanoi(n-1, a, c, b)

hanoi(1, a, b, c)

hanoi(n-1, b, a, c)

呼叫:

hanoi(3, 'a', 'b', 'c')
輸出:

a---->c

a---->b

c---->b

a---->c

b---->a

b---->c

a---->c

python遞迴 演算法 遞迴(Python解釋)

通俗一點來說,遞迴就是一種在函式內呼叫自己的演算法。每一級呼叫都會有自己的引數。每一次呼叫都會有一次返回。可能是返回自己,繼續遞迴 也可能是返回特定值,結束遞迴。遞迴解釋 優點 直觀,實現簡單,可讀性好。缺點 會有重複的呼叫 優化裡會說明 占用空間大,遞迴太深,會造成棧溢位 呼叫太多,不給你呼叫了 ...

python遞迴實現 遞迴演算法 python實現

在函式的定義中對這個函式自身的呼叫,就是遞迴。遞迴結構中,遞迴的部分必須比原來的整體簡單,才有可能到達某種終結點 出口 而且必須存在非遞迴的基本結構構成的部分,否則會無限遞迴。學習目標 程式設計實現斐波那契數列求值 f n f n 1 f n 2 程式設計實現求階乘 n 程式設計實現一組資料集合的全...

python 演算法 遞迴演算法

在計算機中,程式呼叫自身的程式設計技巧我們稱之為遞迴演算法。那麼再通俗一點來講就是 在某個python檔案中,有乙個函式,這個函式可以在自己的函式體內根據條件,自己呼叫自己的函式,那麼這樣自身呼叫自身的過程或者說行為,我們稱之為遞迴。1 假設,有乙個直線型的迷宮 只有一條路,不能拐彎 迷宮中有乙份藏...