Re: [問卦] 寫程式會用遞迴 大概是什麼程度?

看板Gossiping作者 (烏托馬雅)時間1年前 (2023/02/14 22:25), 1年前編輯推噓12(14214)
留言30則, 18人參與, 1年前最新討論串2/3 (看更多)
※ 引述《jason851124 (YeeeEX)》之銘言: : 乳提 : 在寫code的時候 : 常用迴圈來設條件 讓程式來達成想要的目的 : 如for, while, do while : 但有另一種比較進階的概念叫遞迴 : 就如同全面啟動一樣 一層一層的進入夢靨 : 一層一層的呼叫自身函數 最後在慢慢逃脫 : 這種架構在撰寫的時候 邏輯要更清晰 : 想問可以習慣寫遞迴的人 : 大概是什麼等級阿? 有掛? 以前在C語言板看過一個簽名檔 一個在程式語言界有名的人說了一句話:「遞迴只在天上有,凡人應該用迴圈」 可能對方是名人,大家都奉為圭臬 我一點都不同意 舉個簡單例子好了 一個陣列a[]取任意3個,用迴圈怎麼寫? for(int i=0;i<a.size();i++) { for(j=i+1;j<a.size();j++) { for(k=j+1;k<a.size();k++) { //..... //以下做特殊處理 } } } 那如果取20個咧,不就寫到昏倒 以前在冼鏡光的名題精選百則<使用C語言>有提到一個方法,不用遞迴,也不用上述作法 列出K個元素的子集 可是非常難懂,是60年代的計算機科學家就發明出來的方法 因為非常難懂(至少對我),一陣子沒讀又忘了 可是這種陣列a[]取任意n個,用遞迴來做非常好寫 我都這樣寫 void recur(int tl, int level, int start) { if(level==0) { //以下做特殊處理 // ...... return; } for(int i=start;i<a[].size();i++) { recur(tl,level-1,i+1); } } 在最後一層幹掉就好 我在ProjectEuler很常用到這種遞迴 -- https://projecteuler.net/recent 歐拉編程競賽 https://projecteuler.net/problem=829 最新一題是個簡單題 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.71.38.104 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1676384738.A.812.html ※ 編輯: utomaya (219.71.38.104 臺灣), 02/14/2023 22:27:56

02/14 22:26, 1年前 , 1F
寫成python好嗎
02/14 22:26, 1F

02/14 22:27, 1年前 , 2F
用鉤吐就好了
02/14 22:27, 2F

02/14 22:27, 1年前 , 3F
這裡是八
02/14 22:27, 3F

02/14 22:28, 1年前 , 4F
那是你的loop寫錯吧 取n個n是變數當然不是一
02/14 22:28, 4F

02/14 22:29, 1年前 , 5F
層層寫啊 當然recursive的code總是比較精簡
02/14 22:29, 5F

02/14 22:29, 1年前 , 6F
這根本廢話 以DP來說大多數情況top down都比
02/14 22:29, 6F

02/14 22:29, 1年前 , 7F
bottom up容易寫啊 但遞迴現實中就是要考慮
02/14 22:29, 7F

02/14 22:30, 1年前 , 8F
stack overflow阿...像Python我印象中>999就
02/14 22:30, 8F

02/14 22:30, 1年前 , 9F
你太爛吧,我兩層就能選n個了
02/14 22:30, 9F

02/14 22:30, 1年前 , 10F
會error了(層數應該可以改 但就是有這限制)
02/14 22:30, 10F

02/14 22:30, 1年前 , 11F
我問chat就好。你下去吧
02/14 22:30, 11F

02/14 22:30, 1年前 , 12F
情人節看八卦討論程式
02/14 22:30, 12F
※ 編輯: utomaya (219.71.38.104 臺灣), 02/14/2023 22:32:49

02/14 22:33, 1年前 , 13F
你為了j=i+1 k=i+2多開兩層for幹嘛
02/14 22:33, 13F

02/14 22:34, 1年前 , 14F
k=j+1 是你眼睛沒看清楚
02/14 22:34, 14F

02/14 22:54, 1年前 , 15F
都隨意了一開始直接挑出20個index不就好了
02/14 22:54, 15F

02/14 23:04, 1年前 , 16F
這應該叫列出K個元素的所有子集
02/14 23:04, 16F

02/14 23:04, 1年前 , 17F
這是個程式語言中有名的基本訓練
02/14 23:04, 17F

02/14 23:05, 1年前 , 18F
一開始用"隨意" 讓你誤會了 不好意思
02/14 23:05, 18F

02/14 23:18, 1年前 , 19F
亂數取n個 index 就好了啊 你是在寫三小
02/14 23:18, 19F

02/14 23:19, 1年前 , 20F
我也誤會了==收回你太爛,抱歉,我爛
02/14 23:19, 20F

02/14 23:32, 1年前 , 21F
坐等stack爆掉
02/14 23:32, 21F

02/14 23:33, 1年前 , 22F
遞迴也不一定都會 stack overflow,可
02/14 23:33, 22F

02/14 23:33, 1年前 , 23F
以用 tail recursion
02/14 23:33, 23F

02/15 00:51, 1年前 , 24F
糟糕 完全看不懂
02/15 00:51, 24F

02/15 01:09, 1年前 , 25F
不會用array裡裝index喔 笑死
02/15 01:09, 25F

02/15 01:25, 1年前 , 26F
太深stack爆給你看
02/15 01:25, 26F

02/15 04:36, 1年前 , 27F
嗚嗚 第一行就死腦筋了
02/15 04:36, 27F

02/15 06:14, 1年前 , 28F
看不懂取任意三個是啥,你這迴圈跑的
02/15 06:14, 28F

02/15 06:14, 1年前 , 29F
明明就是a.Length個元素的集合取所有
02/15 06:14, 29F

02/15 06:14, 1年前 , 30F
可能的子集合
02/15 06:14, 30F
文章代碼(AID): #1ZwvdYWI (Gossiping)
討論串 (同標題文章)
文章代碼(AID): #1ZwvdYWI (Gossiping)