漫談程序員的阻塞解決之道

新年伊始,首先祝各位新年快樂。
元旦在家沒事做,隨便找了一道給出一組數字的全排列的編程題,題目要求不要用遞歸做。
這種題一看“不要用遞歸做”,那肯定既能用遞歸,也能用迭代了。想出其中一種,另外一種也就迎刃而解了。

但是週末的時候我一看這道題就頭大,光知道一組個數爲N數字的排列的個數是N!。但是怎麼用代碼實現,一時半會兒沒個頭緒。在家想了一個多小時,隨手寫了幾行代碼,發現漏掉了很多排列。然後就趁着元旦佳節,到處嗨去了。哈哈。

2號上班第一天,另外找了一道題。之前那道排列題並不是放棄了,從小到大所有老師都會教我們“先易後難”,我想既然這道題已經讓我產生了挫敗感,那就先試着做別的。另外還有一個原因就是,放假在家寫的代碼沒有提交到git,不能沿着之前的思路繼續。(事實證明換一道題是對的,說不定做完這道題你會發現自己之前的思路是錯的)。這道新題是找出一個集合的子集。思考一番之後,寫出代碼調試通過,也通過了網站上的測試。解出的速度有點太快,以至於我又想繼續看看那道排列題了。

於是,我照着解這道子集題的思路,從小問題到大問題,一下子就發現了排列問題的解法。
對於程序員來說,一旦有這種發現,轉化爲代碼那不過是舉手之勞。同時做這道題也讓我再一次明白了爲何全排列的個數是N!

看來,有時候一味的持之以恆,一味地死磕也並不是好辦法。學會放棄,但是不要永遠放棄。學着用所學所感,聯繫自己之前放棄過的問題,你會發現,so easy!
同時,任何複雜問題都可以從小處着手。一旦你對小的問題瞭如指掌,那麼大問題不過是遞歸或者迭代而已!由小及大也是很多算法的根本思想,也是一個人面對挑戰時應該採取的理性做法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章