Re: [問題] 迴圈改遞迴請益

看板Programming作者時間5年前 (2018/09/29 11:41), 編輯推噓2(208)
留言10則, 4人參與, 5年前最新討論串2/4 (看更多)
※ 引述《RicciYeh (RicciYeh)》之銘言: : 小弟第一次發文,若有違反版規的,請鞭小力點,謝謝。 : 小弟的題目,是尋找一個字串中,某個字母的出現次數 : 迴圈版本相當簡單,我還應付得來,程式碼如下: : int countI(string s, char c) : { : int length = s.size(), cnt = 0; : for (int i = 0; i < length; i++) : if (s[i] == c) : cnt++; : return cnt; : } : 但遞迴的版本,我真的是一點頭緒也沒有 : int countR(string s, char c) : { : int length = s.size(); : if(s[length] == c) : return 1 + countR(s, c); : } : 我原本是這樣寫,可是有一個很大的問題是 length 的值都一樣阿 : 每函式重進去一次,就會重新呼叫 length = s.size(); : 請求各位大神給點方向,感恩。 int countR(string s, char c, ing i = 0) { int length = s.size(); if(i == length) return 0; if(s[i] == c) return 1 + countR(s, c, i+1); else return countR(s, c, i+1); } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.166.40.133 ※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1538192467.A.188.html

09/29 16:04, 5年前 , 1F
那如果不用int i 的話有辦法嗎?
09/29 16:04, 1F

09/29 16:04, 5年前 , 2F
不在函數後面增加變數
09/29 16:04, 2F

09/29 16:04, 5年前 , 3F
主要是這點我想不太出來
09/29 16:04, 3F

09/29 18:58, 5年前 , 4F
那就想辦法把現在的位置傳進去
09/29 18:58, 4F

09/29 18:58, 5年前 , 5F
其中一個方法是切字串
09/29 18:58, 5F

10/03 11:44, 5年前 , 6F
c_str用ptr應該可以不用傳idx,但是cpp
10/03 11:44, 6F

10/03 11:44, 5年前 , 7F
的string我就不確定了
10/03 11:44, 7F

10/11 10:51, 5年前 , 8F
string是call by value吧?每 次都縮短它
10/11 10:51, 8F

10/11 10:52, 5年前 , 9F
遞迴的部分改成substring(1,s.length())
10/11 10:52, 9F

10/11 10:52, 5年前 , 10F
C++用陣列反而簡單,每次讓指標前進一格
10/11 10:52, 10F
文章代碼(AID): #1RhlHJ68 (Programming)
文章代碼(AID): #1RhlHJ68 (Programming)