這一周的演算法的學習

2021-08-20 07:19:09 字數 1440 閱讀 1245

這周對於演算法開始了相對系統的學習,嗯,也算是彌補一下自己之前的不足,劣勢;

從遞迴開始吧:

遞迴, 與迴圈,二者在理論上是等價的,一般的遞迴,我們也總可以,將其表示為迴圈的格式,任何迴圈同樣也可以改寫成遞迴的形式,這裡是一些迴圈改寫遞迴的方法與例子:

聽說哈,有的語言是沒有遞迴的;

遞迴的改寫,重要的是,發現迴圈之中的相似性;

下面是例項:

//列印從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上面,於是就把所有的底層函式重新寫了一遍,截止到昨天總算是完成了,其實裡面的學問還是蠻多的,由於是臨時的現場飛線的板子,晶振十分的不穩定,所以程式時而跑飛,時而跑飛的。而且平台不穩定...

這一周的安排有點緊張啊

本來安排週三,也就是今天到週末去乙個客戶那裡做現場開發,已經訂好了,昨天下午接到乙個 讓我今天去面試,只好和他們協商早上頂門去了,計畫面試完了馬上趕往客戶那裡。是一家天津的公司,待遇一般,不過在天津我還算滿意。只是不知道發展如何,內部的東西不好拿到真實資料。今天晚上爭取把面試的心得和大家分享。接到高...