[問題] 關於return的問題

看板C_and_CPP作者 (Roger)時間11年前 (2014/04/02 19:21), 11年前編輯推噓2(2021)
留言23則, 7人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC 問題(Question): int fib(int n) { return n<3?2:fib(n-1)+fib(n-2); } int main() { printf("%5d",fib(5)); } 今天在書上看到如上所示的問題(大致表示如上,不確定語法是否完全正確) 我是寫印出來的會是10,不過似乎不是正確的? 有大大可以分享一下意見嗎,謝謝 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.36.248.64 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1396437710.A.615.html

04/02 19:52, , 1F
04/02 19:52, 1F

04/02 20:00, , 2F
主要是初始值, n=0,以及n=1的case沒考慮
04/02 20:00, 2F

04/02 20:24, , 3F
fin當然錯了 這種寫法f(0)=f(1)=f(2)=2
04/02 20:24, 3F

04/02 20:26, , 4F
可是不是只要N<3,都return 2回去?
04/02 20:26, 4F

04/02 21:19, , 5F
fib(2)=fib(1)+fib(1) 那就不會都是2阿
04/02 21:19, 5F

04/02 22:59, , 6F
當然不是 f(0)=1 f(1)=1 f(2) = f(1)+f(0)=2
04/02 22:59, 6F
不好意思,還是不是很清楚,我的邏輯是這樣的 fib(5) = fib(4)+fib(3) = fib(3)+fib(2)+fib(3) = [fib(2)+fib(1)]+fib(2)+[fib(2)+fib(1)] 就我看到的是有3個fib(2)跟兩個fib(1),所以我會判斷total是10 至於K大說的"f(0)=1 f(1)=1"的部份,請問是在哪邊被定義到的呢?謝謝 ※ 編輯: ybelauren (114.36.248.64), 04/02/2014 23:44:46

04/02 23:47, , 7F
PS:fib(2)跟fib(1)不判斷是因為n<3,我就不考慮fib(n-1)+
04/02 23:47, 7F

04/02 23:47, , 8F
fib(n-2)
04/02 23:47, 8F

04/03 00:32, , 9F
所以fib是費氏數列嗎
04/03 00:32, 9F

04/03 00:32, , 10F
你是程式的結果有問題還是寫法有問題?
04/03 00:32, 10F

04/04 02:12, , 11F
問題是 fib(0) 和 fib(1) 這是多少?是 2 嗎?
04/04 02:12, 11F

04/04 02:15, , 12F
如果是費氏數列,f(0) = 1, f(1) = 1 這是常識
04/04 02:15, 12F

04/04 13:43, , 13F
我確定fib(n)只有上述的定義 書上並沒寫是否費氏數列
04/04 13:43, 13F

04/04 13:44, , 14F
或給fib(1) or fib(2)定義
04/04 13:44, 14F

04/05 09:52, , 15F
這樣的程式是會得到10. 但這個fib()和費氏數列的定義不同
04/05 09:52, 15F

04/05 11:09, , 16F
那就沒有問題啦
04/05 11:09, 16F

04/05 11:53, , 17F
那這個函數名稱取的太含混了... fib幾乎是公認的費氏
04/05 11:53, 17F

04/05 11:54, , 18F
如果不是fibonacci 根本不該取名為fib orz....
04/05 11:54, 18F

04/05 11:55, , 19F
基本上這本書這樣寫 問題實在大的很離譜
04/05 11:55, 19F

04/05 15:43, , 20F
八成只是寫錯,return n < 2 ? 1 : ... 這樣就對了
04/05 15:43, 20F

04/05 15:44, , 21F
我不覺得這函式會有什麼特別的意義,名字像內容像
04/05 15:44, 21F

04/05 15:44, , 22F
結果內容卻不是費氏數列。
04/05 15:44, 22F

04/06 02:39, , 23F
就像橄欖葵花油一樣。
04/06 02:39, 23F
文章代碼(AID): #1JE_BEOL (C_and_CPP)