[問題] 關於遞迴的使用時機消失

看板C_and_CPP作者時間7年前 (2018/01/12 17:21), 編輯推噓11(11025)
留言36則, 16人參與, 最新討論串1/1
各位大大高手好~ 小弟最近在練習寫code的時候, 雖然題目被我解出來了, 但通常我會習慣看別人遇到這題會怎麼寫, 有時看別人會用遞迴的方式來解答。 我想請問各位大大, 到底甚麼情況下會讓你想到要遞迴的方式去解? 是單純經驗的累積嗎? 因為我覺得要第一時間想到用遞迴解老實說還滿困難的... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.161.132.117 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1515777683.A.32B.html

01/13 01:34, , 1F
通常是可以拆成一樣的小問題的時候 多刷幾題就會了
01/13 01:34, 1F

01/13 01:52, , 2F
遞迴能不要用就不要用吧,弄不好stack還會爆表
01/13 01:52, 2F

01/13 03:01, , 3F
01/13 03:01, 3F

01/13 03:52, , 4F
C/C++幾乎不用遞迴,只有作業一定得用而已吧
01/13 03:52, 4F

01/13 04:15, , 5F
divide and conquer?
01/13 04:15, 5F

01/13 04:28, , 6F
順便問一下,dfs有遞迴外的方法嗎?
01/13 04:28, 6F

01/13 08:07, , 7F
constexpr函數會需要遞迴
01/13 08:07, 7F

01/13 08:53, , 8F
棣回和迴圈等價 而且已經做成compiler了
01/13 08:53, 8F

01/13 08:53, , 9F
優化開下去就幫你把遞迴轉成迴圈
01/13 08:53, 9F

01/13 08:54, , 10F
其實就是上面問學資料結構那一篇的推文有說
01/13 08:54, 10F

01/13 08:56, , 11F
習慣電腦的想法比較重要
01/13 08:56, 11F

01/13 08:58, , 12F
遞迴的思維就是數學上的遞迴 每次透過迭代算下一輪
01/13 08:58, 12F

01/13 08:59, , 13F
用迴圈是從i小往i大走 遞迴是從i大一路叫i小的執行
01/13 08:59, 13F

01/13 09:00, , 14F
至於你是真的想練遞迴想法的話 可以把現有的遞迴code
01/13 09:00, 14F

01/13 09:01, , 15F
改寫成tail recursion 這種練習也可以試看看
01/13 09:01, 15F

01/13 09:03, , 16F
或者是直接是玩玩看functional language例如lisp或
01/13 09:03, 16F

01/13 09:03, , 17F
haskell
01/13 09:03, 17F

01/13 09:05, , 18F
然後等一下就會有人說c/c++版要推c/c++語言
01/13 09:05, 18F

01/13 09:24, , 19F
會用遞迴通常都只有一個原因,問題本身可以用遞迴方式
01/13 09:24, 19F

01/13 09:25, , 20F
定義,因此用遞迴來解可能比較簡單、程式碼可能比較短
01/13 09:25, 20F

01/13 09:25, , 21F
當然,遞迴程式執行速度照理說是不可能比較快。
01/13 09:25, 21F

01/13 09:26, , 22F
任何遞迴程式都可以寫成非遞迴的型式,理論上用堆疊都
01/13 09:26, 22F

01/13 09:26, , 23F
可以做得到,只是有可能很麻煩。
01/13 09:26, 23F

01/13 10:12, , 24F
樓上 遞迴本來就是stack 何來困難?
01/13 10:12, 24F

01/13 10:15, , 25F
因為想到遞迴函數裡面再加幾個迴圈,可以寫得很複雜,
01/13 10:15, 25F

01/13 10:16, , 26F
改寫成非遞迴還是可能很麻煩。
01/13 10:16, 26F

01/13 13:54, , 27F
遞迴用不好stack不是很容易就爆掉嗎
01/13 13:54, 27F

01/13 14:22, , 28F
不知道有沒有遞迴特化的程式語言 沒有for這樣XD
01/13 14:22, 28F

01/13 17:07, , 29F
處理XML,JSON 這類深度不固定的nest資料
01/13 17:07, 29F

01/13 17:09, , 30F
或是在寫interpreter
01/13 17:09, 30F

01/13 17:50, , 31F
C++的TMP算吧
01/13 17:50, 31F

01/13 19:04, , 32F
把recursive想成while迴圈就很容易實現了吧
01/13 19:04, 32F

01/13 19:27, , 33F
functional language 強調的是沒有 assignment
01/13 19:27, 33F

01/13 19:27, , 34F
幾乎都靠遞迴。
01/13 19:27, 34F

01/13 23:52, , 35F
感謝各位大大的回覆~小弟會繼續努力練功的!
01/13 23:52, 35F

01/15 06:55, , 36F
探訪樹的節點的時候?
01/15 06:55, 36F
文章代碼(AID): #1QMEwJCh (C_and_CPP)