資料結構與演算法一

2021-09-10 01:19:50 字數 1489 閱讀 1613

遞迴:無限呼叫自身這個函式,每次呼叫總會改動乙個關鍵變數,直到這個關鍵變數達到邊界的時候,不再呼叫。

遞迴與迴圈的區別?

相同點:

(1)都是通過控制乙個變數的邊界(或者多個),來改變多個變數為了得到所需要的值,而反覆而執行的;

(2)都是按照預先設計好的推斷實現某乙個值求取;(請注意,在這裡迴圈要更注重過程,而遞迴偏結果一點)

不同點:

(1)遞迴通常是逆向思維居多,「遞」和「歸」不一定容易發現(比較難以理解);而迴圈從開始條件到結束條件,包括中間迴圈變數,都需要表達出來(比較簡潔明瞭)。

簡單的來說就是:用迴圈能實現的,遞迴一般可以實現,但是能用遞迴實現的,迴圈不一定能。

因為有些題目①只注重迴圈的結束條件和迴圈過程,而往往這個結束條件不易表達(也就是說用迴圈並不好寫);

②只注重迴圈的次數而不注重迴圈的開始條件和結束條件(這個迴圈更加無從下手了)。

eg:用迴圈的方法計算1-5的和?

def get_sum(n):

num=0

for i in range(n+1):

num+=i

return num

print(get_sum(5))

輸出結果:15
eg:用迴圈的方法計算1-5的乘積?

def get_sum(n):

num=1

for i in range(1,n+1):

num*=i

return num

print(get_sum(5))

輸出結果:120
遞迴:

eg:用遞迴的方法計算某乙個數以內的偶數和?

def mul(n):

if n>1 and n%2==0:

return mul(n-2)+n

elif n>1 and n%2==1:

return mul(n-3)+n-1

elif n==0:

return 0

print(int(mul(7)))

輸出結果:12
斐波那契數列演算法

eg:確定某一位的斐波那契數?

def dif(n):

return dif(n-1)+dif(n-2) if n>2 else 1

print(int(dif(5)))

輸出結果:5
def dif1(n):

a = 0

b = 1

for i in range(n):

b = a + b

a = b - a

return a

print(dif1(5))

輸出結果:5

資料結構與演算法(一) 資料結構與演算法概念

資料結構是計算機儲存 組織資料的方式。資料結構是指資料與資料之間的關係。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。資料結構往往同高效的檢索演算法和索引技術有關。邏輯結構 示意圖1 集合結構 2 線性結構 3 樹形結構 4...

資料結構與演算法(一)

物件導向程式設計方式 1.使用自定義類封裝陣列 2.新增類方法來實現資料操作。無序陣列 增 刪 改 查 更 顯 public class myarray public myarray int maxsize 新增資料 public void insert long value 顯示資料 public...

資料結構與演算法 一

1 稀疏陣列 3 二叉排序樹 搜尋樹 紅黑樹 3.1 hashset,底層是個hashmap例項 結構 查詢快 jdk1.8版本後,雜湊表結構是 陣列 鍊錶 紅黑樹 3.2 hashcode 方法,string類重寫了該方法 linkedhashset,結構中加了個鍊錶保證它是有序的 和存入的順序一...