一、遞迴演算法三定律
二、通過求列表和分析遞迴演算法
**如下:
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 假設,有乙個直線型的迷宮 只有一條路,不能拐彎 迷宮中有乙份藏...