C_and_CPP 板


LINE

不好意思又是我c++新手 想問一個問題 舉個例子 #include<iostream> using namespace std; void f(int); int main(){ f(2); return 0;} void f(int x){ int a=1; int b=2; if (x==1) cout<<a<<b; if(x==2){ a=2; b=1; f(1);} } 印出來結果會使用變數a=1,b=2 我在想有沒有辦法能夠讓遞迴函數每次都使用新設定的變數呢(就我要用f(2)重新指派的變 數a=2 b=1來印出ab) 我想過用static變數(只有第二次有用,剩下都還是沒用xd)、 參照 不過好像都沒搞頭 ps.主要是我在練習河內塔問題的時候,一般解答都是用四個變數的函數 但是如果能夠解決上述問題的話是不是能用一個變數解決呢~ 謝謝! ---- Sent from BePTT on my OPPO CPH1943 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 112.78.66.70 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1695603674.A.133.html ※ 編輯: amamoimi (112.78.66.70 臺灣), 09/25/2023 09:21:36 ※ 編輯: amamoimi (112.78.66.70 臺灣), 09/25/2023 09:51:50
1F:推 lwecloud: 把變數a,b傳進去;包成class用member variable09/25 10:11
願聞其詳 ※ 編輯: amamoimi (112.78.66.70 臺灣), 09/25/2023 12:09:27
2F:推 lc85301: 你可以想 x 就是一個你可以設定的東西09/25 13:16
3F:→ lc85301: 所以你可以把 f 改成 f(int x, int a, int b)09/25 13:16
4F:→ lc85301: 但這樣太長了,可以包 strcut 當參數來傳09/25 13:17
5F:→ amamoimi: 所以還是得設多變數才行囉?09/25 17:08
6F:推 wulouise: 你要render河內塔的圖案還是想做什麼? context比較重要09/25 18:21
7F:推 sarafciel: n只代表搬動的盤子數而已,你想縮減到剩下n,那就會los09/25 22:00
8F:→ sarafciel: e掉哪裡搬到哪裡的資訊,自然就變成解不出來河內塔了09/25 22:00
9F:→ amamoimi: 我想說如果能在函數裡定義a柱b柱c柱,每次盤子增加時呼09/26 08:16
10F:→ amamoimi: 叫f(x-1)能直接讓f(x-1)的b柱跟c柱調換這樣感覺寫起來09/26 08:16
11F:→ amamoimi: 比較直觀09/26 08:16
12F:→ amamoimi: 不過這也只是我初步想法~確切要怎麼寫我也還沒有頭緒09/26 08:17
13F:推 LPH66: 最簡單的就是告訴函數"你的a柱是誰,b柱是誰,c柱是誰"09/26 15:34
14F:→ LPH66: 而這就只是簡單地把參數傳進去而已09/26 15:35
15F:→ LPH66: 遞迴的時候會出現"我的a柱是子問題的b柱"這種事情09/26 15:35
16F:→ LPH66: 那就直接將告訴我是a柱的東西傳給子問題的b柱就好09/26 15:36
17F:→ LPH66: (基本上就是二樓提的,要不要包struct隨你)09/26 15:36
了解!
18F:→ xanxus27: 感覺 如果不是f(int x, int a, int b)的話09/26 16:07
19F:→ xanxus27: 有一些思路09/26 16:07
20F:→ xanxus27: x用2位數 4位數來表示 ex. x = a*10 + b 個位數是b09/26 16:17
21F:→ xanxus27: 十位數是a 這樣只要適當用/跟%應該也能操控09/26 16:17
22F:→ xanxus27: 直接用陣列 x = [a, b, x]09/26 16:18
請問用陣列的話要怎麼寫好呢 ※ 編輯: amamoimi (112.78.66.70 臺灣), 09/26/2023 17:23:19
23F:推 wulouise: 每根都是std::stack然後 void(stack& from, stack& to)09/26 22:10
24F:→ wulouise: 這樣就夠了吧?09/26 22:10
25F:→ wulouise: 不過stack要看內容比較麻煩,你可以用vector的push_back09/26 22:11
26F:→ wulouise: pop_back就好09/26 22:11
27F:→ amamoimi: 我是希望函數可以只用「總共幾個幾個盤子」當變數這樣0
9/27 21:42 ※ 編輯: amamoimi (1.200.27.202 臺灣), 09/27/2023 21:43:20
28F:→ amamoimi: 畢竟河內塔就是只要你指定盤子的數目,所有的步驟都是決09/27 21:48
29F:→ amamoimi: 定好的呀~09/27 21:48
30F:→ sarafciel: https://godbolt.org/z/fvdeT6Wrr 那多包一層就好了09/28 23:14
31F:→ amamoimi: ...好吧xd我被你說服了 謝謝~09/29 07:42
※ 編輯: amamoimi (1.200.3.16 臺灣), 09/29/2023 07:44:16 ※ 編輯: amamoimi (1.200.3.16 臺灣), 09/29/2023 07:45:01
32F:推 closer76: 當你使用遞迴時,要思考的應該是「如何把所有會變動的資 09/30 10:59
33F:→ closer76: 料都用參數傳遞」,而非「使用靜態/全域變數減少參數」 09/30 11:00
34F:→ closer76: 遞迴有一點像是讓電腦幫你計算函式要呼叫幾次、順序為何 09/30 11:03
35F:→ closer76: 這個函式應該要盡可能是「純函數」,才能保證執行結果 09/30 11:04
36F:→ amamoimi: 了解 謝謝前輩! 10/02 10:13







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP