[問題] 要如何建構程式遞迴的概念

作者: Kuba4ma (哦吼)   2020-03-27 13:03:10
我學Python大概半個月
之前有學過資料結構和演算法(但沒用程式實作過)
leetcode上難度easy的array或是linked list的題目可以解7成
這陣子想說來刷Tree的題目
但沒有一題能夠靠自己想出來
我本身知道遞迴在幹嘛(知道數學遞迴定義)
不過沒辦法自己寫程式跑出正確答案
然後上網看別人的答案又看得懂
看自己的程式又臭又長跑不出答案
但是看到別人的程式才簡單幾行
真的是滿滿的挫折感
程式新手要怎麼建構程式遞迴的概念阿
作者: ddavid (謊言接線生)   2020-03-27 13:16:00
回頭去看看數學上定義的遞迴式?
作者: Kuba4ma (哦吼)   2020-03-27 13:17:00
數學定義的遞迴我看得懂 但問題是程式實作不出來 冏
作者: ddavid (謊言接線生)   2020-03-27 13:18:00
那也有可能是程式實踐能力上並沒有你自己所想的充足,你還沒法真的做到腦中想什麼就能化為程式寫出來遞迴說到頭關鍵也就只是寫出遞迴式跟設定終止條件,程式本身是很精簡的另外就是 看得懂 跟 懂 往往是兩回事看得懂有時候是人家寫得很好很漂亮所以好懂,可是你沒有深入去想為什麼這麼寫,如果這邊那邊改動一下會有什麼效果,如果自己來寫會用什麼寫法的話,那不能算是真懂像你也說數學定義的遞迴你看得懂,那你有試過拿習題來自己實際寫出對應的遞迴式跟終止條件嗎或是現實要解個什麼問題,你不管三七二十一就是從其中找個地方用遞迴去思考,有時這雖然不是最佳解法卻可能是很好的思考訓練
作者: cuteSquirrel (松鼠)   2020-03-27 14:16:00
把原問題轉化成有固定降解形式的子問題。還有對應的邊界條件
作者: watashino (我同學數學很爛)   2020-03-27 14:39:00
我覺得重點就三個啦,前兩個記得一定要有1.終止條件2.呼叫自己的方式3.寫function的過程中呼叫自己的時候可以把這個function當作已經完成了,呼叫了就會有你要的output了,這樣會容易很多
作者: OrzOGC (洞八達人.拖哨天王)   2020-03-27 15:09:00
我只能CO別人寫好的來改...QQ
作者: pmove (金疾檸檬)   2020-03-27 16:58:00
我刷了一百多題的經驗是,很多tree的簡單題,我想的比一些中等,甚至困難難度的還要久,難度只能做參考,並不是絕對
作者: liflguy (xxxwino)   2020-03-27 23:00:00
發現一整個問題是由小問題組成,可以藉由解決小問題後解決下一階段的問題,數學上基本的表示為f(x)=f(x-1)
作者: ddavid (謊言接線生)   2020-03-28 17:15:00
樓上的式子不太精確XDf(x)=f(x-1)只會得到f(x)=f(1) for all x XD
作者: protoss (天生散人)   2020-03-29 03:15:00
這資料結構的書不是一開始會教嗎?我記得拿河內塔當例子..
作者: pmove (金疾檸檬)   2020-03-29 10:55:00
f(x)=f(x-1)是一種遞迴,但不是所有遞迴都可以這樣子表示
作者: yoche2000 (Sushi Desu! 在下壽司)   2020-03-29 14:44:00
費式數列
作者: liflguy (xxxwino)   2020-03-30 00:20:00
樓上各位沒錯,只是舉個最簡單的例子XD
作者: velaro (下路雙組合)   2020-04-04 13:50:00
https://www.bilibili.com/video/av21540971/python 資料結構的影片

Links booklink

Contact Us: admin [ a t ] ucptt.com