這周對於演算法開始了相對系統的學習,嗯,也算是彌補一下自己之前的不足,劣勢;
從遞迴開始吧:
遞迴, 與迴圈,二者在理論上是等價的,一般的遞迴,我們也總可以,將其表示為迴圈的格式,任何迴圈同樣也可以改寫成遞迴的形式,這裡是一些迴圈改寫遞迴的方法與例子:
聽說哈,有的語言是沒有遞迴的;
遞迴的改寫,重要的是,發現迴圈之中的相似性;
下面是例項:
//列印從0到9的整數;
#include
#include
void main()
_getch();
}這樣就是乙個初步的迴圈輸出的樣式,現在要改寫為遞迴的格式,該如何改變。
遞迴,之前聽有一位老師講過,實質上始終踢皮球的做法
以上面這個例字來假設,要想列印從0-9的整數,想象,這個工作,被推到我身上,但是我又不能原封不動地將所有工作交給下屬,我多少得做一些,所以,我可以這麼幹:
定義乙個函式,列印乙個數字;
int print(int n)
就是我幹一部分工作,比如說我列印n,將剩下的所有工作推給下屬,然後,同理,下屬也是想要推卸責任,下屬只列印了n-1的那乙份,又將剩下的工作推給下屬的下屬………………以此類推
但是,這裡就出現了遞迴的乙個限制,凡是遞迴,實質上是函式不斷呼叫自身的做法,如果這麼無限次呼叫下去,那就是死迴圈,我們要考慮如何從這個遞迴的死迴圈裡跳出來,就
是,找到出口
int f(int n)
printf("%d", n);//列印n
}這裡加入了乙個限制,限制了n的取值,當n>0的時候,遞迴才能繼續呼叫。
當然如果沒有相似性,就需要我們主動構造相似性,有一些迴圈不能找到相似性的原因可能是缺少引數,這個時候就需要找到乙個引數作為函式呼叫之間的橋梁,保證其相似性,構造遞迴
複雜一點的例子:
陣列所有元素求和
原:#include
#include
#define n 10
int add(int a);
void main()
;int sum;
sum = add(a);
printf("%d\n", sum);
_getch();
}int add(int a)
return x;
}這裡要想將這個迴圈改寫成遞迴的形式,做法如下:
int f(int a,int begin) //求a陣列中從begin開始到結束的元素和
void main()
;int sum;
sum = f(a,0);//從第零項開始累加
printf("%d\n", sum);
_getch(};
}這個就是一些簡單的遞迴的變換構造的問題的做法
獻醜f(n-1);//列印0-(n-1)
printf("%d",n);//列印n
這一周的總結
學習上 上週週日進行了試卷考核,考核前一夜看的後端知識點第二天考核的卷子上有,但是 忘了 忘了 忘了 很苦惱啊,還有前端的知識點,記得不牢固。每個問題中回答的都是一部分。程式設計題中第乙個程式設計題,自己以前做過,還可以。第二個程式設計題思路斷斷續續的,再加上自己時間安排的不合理。題理解的意思也不是...
這一周小總結
基本上處理的都是軟體方面的事宜,由於msp430 5519造價太高,於是有了平台移植的乙個工作,移植到430 5418上面,於是就把所有的底層函式重新寫了一遍,截止到昨天總算是完成了,其實裡面的學問還是蠻多的,由於是臨時的現場飛線的板子,晶振十分的不穩定,所以程式時而跑飛,時而跑飛的。而且平台不穩定...
這一周的安排有點緊張啊
本來安排週三,也就是今天到週末去乙個客戶那裡做現場開發,已經訂好了,昨天下午接到乙個 讓我今天去面試,只好和他們協商早上頂門去了,計畫面試完了馬上趕往客戶那裡。是一家天津的公司,待遇一般,不過在天津我還算滿意。只是不知道發展如何,內部的東西不好拿到真實資料。今天晚上爭取把面試的心得和大家分享。接到高...