遞迴與線性表

2021-08-19 22:48:37 字數 1032 閱讀 4808

(學習記錄)

今天我們來嘮一嘮,關於線性表和遞迴的一些想法 .

一.我們先來談一談什麼是遞迴

1.遞迴,我們都不陌生。非常經典的遞迴模型就是關於漢諾塔問題,在盤子數量很少時、我們可以總結出來一些歸律,發現這些盤子的移動都有共同點、總是先將n-1個盤子借助於輔助塔先從第n個盤子上挪開、然後將第n個放置指定位置、然後重複這個過程(遞迴呼叫自己)、求解。

特點:1.把乙個很大規模的問題轉化為多個與原問題相似的子問題。

2這些子問題最後都有乙個出口、比如上面那個就是以大化小遞迴到只有乙個盤子時,將其放置於指定位置。

二.線性表

線性表這個定義不多談,相信大家都耳聞能詳。

那麼怎麼用遞迴求解線性表的最大值呢?

我們給出順序表的定義

#define maxsize 100              /* 線性表最大長度 */

typedef int elemtype;             /* 我們假設型別為int */

typedef struct sqlist;

//假設1,2,3,4,5,6,7,8,9,10已經放入

我們可以這樣想

1.如果只有乙個元素,那麼他自己就是最大值

2.如果有兩個、進行比較就可得出

3.如果有n個,那麼我們先將其分為兩個部分,分別求兩個部分的最大值、進行比較就可的出

原始碼如下:

//l為傳入的順序表,不為空

//max為函式的要返回的最大值,

//low-high儲存一段資料

void maxvalue(sqlist *l, int low, int high, int *max)

maxvalue(&l, 0, l.length - 1, &max);                 //必須以下標呼叫

printf("%d ", max);

return 0;

} //就是這樣,同理我們還能求出最小值,這個如果有興趣,大家可以試著玩一下.

//我們也可以逆序輸出線性表採用遞迴演算法

//每天都是一種進步

遞迴與線性表的總結

一.在演算法設計中經常用到遞迴,我們先看看在什麼時候通常適合遞迴。1.有許多數學公式 數列等等的定義是遞迴,比如階乘 斐波那契數列都是可以將其遞迴定義轉化為對應的遞迴演算法.比如求n!遞迴演算法如下 long jie cheng int n typedef struct node 3.問題的求解方法...

線性表與鍊錶

線性表線性表是最基本 最簡單 也是最常用的一種資料結構。優點 記憶體占用少,查詢快,增刪慢。增刪慢的原因是,在中間新增乙個元素,其他所有的元素需要向後挪。耗能高所以慢。陣列,佇列和棧。佇列 queue 一種特殊的線性表,先進先出 fifo 只能刪除表的前端,只能新增到表的尾端。棧 stack 一種運...

線性表之線性表與陣列的區別

線性結構是最簡單也是最常用的資料結構之一。線性結構的特點 在資料元素有限集中,除第乙個元素無直接前驅,最後乙個元素無直接後續以外,每個資料元素有且僅有乙個直接前驅元素和乙個直接後繼元素。如果線性表中的資料元素時物件時,陣列存放的是物件的引用,即線性表中所有資料元素的物件引用是存放在一組連續的位址空間...