/* 斐波那契序列的兩種表示 */
#includevoid fbi_iterator(int len); /* 遞迴表示法 */
int fbi_recur(int len);/* 迭代表示法 */
int main(void)
return 0;
}
void fbi_iterator(int len)
{ int a=0,b=1;
printf("%d,",a);
printf("%d,",b);
for(int i=2;i把乙個直接呼叫自己或通過一系列語句間接地呼叫自己的函式,稱為遞迴函式。 每個遞迴定義必須至少有乙個條件,當滿足時退出。
迭代和遞迴的區別是:迭代使用的是迴圈結構,遞迴使用的是選擇結構。遞迴能使程式的結構更清晰簡潔更易理解。但大量的遞迴呼叫會建立函式的副本,會耗費大量的時間和記憶體。而迭代不會。
遞迴過程的退回順序是它前行順序的逆序。這種儲存某些資料,並在後面又以儲存的逆序恢復這些資料,以提供之後使用的需求,即符合棧這種資料結構。
對於乙個四則去處表示式:9 + (3-1)*3+10/2,使用字尾表示式 9 3 1 - 3 * + 10 2 / +,之所以叫它字尾表示式是因為所有的符號都是在要運算的數字後面出現,相似的,普通的表示式稱為中綴表示式。
對於字尾表示式:9 3 1 - 3 * + 10 2 / +
求值規則:從左到右遍歷表示式的每個數字和符號,遇到是數字就進棧,遇到是符號,就將處於棧頂的兩個數字出棧進行運算,運算結果進棧,一直到最終獲得結果。
即9、3、1進棧,然後 -出現時,將3 1出棧,即3-1=2,將2進棧,然後是將3進棧,然後有*,即2*3=6,將6進棧,然後是+即將9+6=15進棧,然後是10、2進棧,然後是符號/,即10/2=5進棧,然後是+號即15+5=20,20進棧再出棧。
對於中綴表示式:9 + (3-1)*3+10/2
轉化規則:從左到右遍歷中綴表示式的每個數字和符號,苦是數字就輸出,即成為字尾表示式的一部分;若是符號,則判斷其與棧頂符號的優先順序,是右括號或優先順序低於棧頂符號(乘除優先加減)則棧頂元素依次出棧並輸出,並將當前符號進棧,一直到最終輸出表示式為止。
即9輸出,+、(進棧,3輸出,-進棧,1輸出,)時將-輸出,即9 3 1 -然後是*(優先順序高於棧頂符號+因此入棧),然後是3輸出,即9 3 1 - 3然後是+,+低於,因此出棧即 9 3 1- 3 *+,並將當前+的入棧,然後是10輸出,然後是/進棧,然後是2輸出,即9 3 1 - 3 * +10 2 然後全部出棧 9 3 1 - 3 *10 2 / +
參考:《大話資料結構》
資料結構與演算法讀書筆記 簡介
資料 人們利用文字元號 數字符號以及其他規定的符號對現實世界的事物及其活動所做的抽象描述。學號 姓名 性別 資料元素 表示乙個事物的一組資料。是資料 集合 中的乙個 個體 是 資料的基本單位。學號和姓名和性別的整體的一組資料 資料項 構成資料元素的資料,是資料結構中討論的最小單位。學號和姓名和性別的...
演算法筆記pdf 資料結構演算法與os 讀書筆記整理
1 資料結構與演算法 1.1 資料結構與演算法 鄧俊輝 dsacpp zhousoft tsinghuadatastructoj alg4 kevin wayne algs4 演算法 第4版 筆記 王爭wangzheng0822 algo 1.2 leetcode 左程雲 python resolv...
資料結構讀書筆記
首先有個關於指標的問題 如果函式傳進來乙個指標 p,函式裡操作p不會影響原來的值,而如果有 或者 才會改變 比如 malloc的時候傳入指標的指標才行 o 1 刪除節點時末尾必須要便利一遍 刪除頭指標要變為刪除第二個節點。1.o 1 刪除指定位置的節點 如果為最後乙個節點還是必須遍歷一遍 2.倒數第...