看板 C_and_CPP 關於我們 聯絡資訊
基本C程式語言沒學好,去學資料結構有點崩潰, 看到我下面的敘述大概就會了解....我目前有點鳥 還請各位給小弟一些指點 目前在教遞迴,老師要我們使用遞迴的程式 計算像是+1+*23*45的式子 這個式子就是1+(2*3+4*5)的意思 就是只要抓到運算子就往後面抓兩個運算元做運算傳回 又遇到運算子就在往後抓兩的運算元做運算傳回 遞迴下去 老師提示加上自己想的程式碼大概是 int F( ) /使用遞迴的主要函數/ { if(x=數字){ return 數字 } else{ if (x="+") if(x="-") if (x="*") } } int main () { printf ("%d\n,F()); . . . 真的不知道該怎麼做,已經卡很久了,還請各位幫忙了,謝謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.136.37 ※ 編輯: a26573633 來自: 140.114.136.37 (10/04 11:31)
a26573633:不知道大家看不看的懂...... 10/04 11:41
DEATHX:我沒看到你的虛擬碼裡面有自己call自己的地方? 10/04 11:54
blackwindy:先問你 "遞迴"的定義是甚麼? 10/04 11:54
a26573633:如果抓到+-*就要call自己吧?! 10/04 11:57
a26573633:遞迴不是一個函數會CALL自己,然後一層一層跑下去,在一層 10/04 11:59
a26573633:一層算回來? 10/04 11:59
BlazarArc:你可以先思考一下F的功能是什麼 10/04 12:06
BlazarArc:比如說 F 是要 算出 *23 的結果, input 跟 return 為何? 10/04 12:06
BlazarArc:然後再想 F 對 +1+*23*45 使用的話會是如何 10/04 12:07
blackwindy:先寫個簡單練習 F(x)=F(x-1)+2, F(0)=5, x>0 10/04 13:22
int F(int x) if (x==0) return 5 ; EX: x=3 return F(x-1) + 2 ; F(3)=F(2)+2 F(2)=F(1)+2 F(1)=F(0)+2 F(0)=5 這樣對嗎?? ※ 編輯: a26573633 來自: 140.114.136.37 (10/04 13:39)
blackwindy:既然會的話就會寫了吧 差不多的東西 10/04 13:45
想了很久,還在想= =,像是上面這一題,x代一個數字就 直接進F(x)去跑,遞迴F(x-1),,,繼續跑,但如果是像 +1+*23*45這種,要如何進入F()函數,一樣F(int x)? 是不是我C哪裡漏學了.....還是腦袋瓜卡住了
blackwindy:多想想就好,另外你可以搭配全域變數使用 10/04 13:45
EdisonX:這題是不是從字串後面跑到前面比較容易啊 ?? 10/04 13:51
EdisonX:從後面跑到前面才明顯有兩個運算元啊(順序也沒問題..) 10/04 13:52
bigpigbigpig:溫馨提示:抓後面兩個運算元的地方需要遞迴 :) 10/04 14:12
QQ
s90366770607:輸入是字串 當然是用字串處理阿 10/04 14:33
blackwindy:F(char * string); 10/04 14:40
真是謝謝了 我去試試看 所以要使用字元陣列和指標?! ※ 編輯: a26573633 來自: 140.114.136.37 (10/04 15:15)
loveme00835:to EdisonX: 從前面跑到後面等函式呼叫結束並回傳讀取 10/04 16:22
loveme00835:頭比較簡單 10/04 16:22
EdisonX:感謝 loveme~,這題我也在 try 怎麼做說 @@ 10/04 16:30
哈哈 不會是同學吧@@
EdisonX:我也希望我是你同學,大概沒機會再旁聽課程了吧 @@ 10/04 19:53
loveme00835:我的作法 http://ideone.com/Raflr 10/04 21:55
謝謝版主~~ 感覺好難阿= = [1;37m推 EdisonX:推版主的 :) 10/05 00:46 ※ 編輯: a26573633 來自: 111.251.218.237 (10/05 15:50)