[問題] 關於遞迴函式的一點問題

看板C_and_CPP作者 (阿偉)時間4年前 (2020/03/13 23:57), 編輯推噓9(9010)
留言19則, 9人參與, 4年前最新討論串1/1
版上各位好, 小弟最近剛學C++ 目前看到遞迴函式的地方有點小問題 遞迴函式的經典範例就是拿來計算階乘 但我有一個地方有點不太懂 程式碼如下 : int factorial(int n) { if (n == 1) return 1; else return (n * factorial(n - 1)); } 在輸入的n不為1的時候會一直不斷地呼叫自己做計算 當n==1時停止 但當它不斷呼叫自己直至n=1時不是會被return 1嗎? 為何最終的答案還是階乘正確計算的數值呢? 請教版上各位大神解答 感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.169.148.169 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1584115053.A.D25.html

03/14 00:02, 4年前 , 1F
1*2*3*...n-1*n 會從內而外乘回來
03/14 00:02, 1F

03/14 00:04, 4年前 , 2F
紙上畫個圖,或者print執行過程 追蹤一下就知道了
03/14 00:04, 2F

03/14 00:34, 4年前 , 3F
https://pastebin.com/5RnNWXrT 看看這樣能不能理解
03/14 00:34, 3F

03/14 01:20, 4年前 , 4F
我寫的是c 然後n<1就 return 1 想請問 我原本打成retur
03/14 01:20, 4F

03/14 01:20, 4年前 , 5F
n 0 然後輸入4的時候 一樣輸出會是0 這是為何
03/14 01:20, 5F

03/14 01:53, 4年前 , 6F
因為 "0 * n = 0 " 啊
03/14 01:53, 6F

03/14 05:06, 4年前 , 7F
每呼叫一次就多一層, 一個 return 只有回傳一層而已
03/14 05:06, 7F

03/14 10:09, 4年前 , 8F
可是我n=4的時候不是應該return n*facetorial(n-1)嗎
03/14 10:09, 8F

03/14 10:09, 4年前 , 9F
怎麼跟return0有關係
03/14 10:09, 9F

03/14 10:20, 4年前 , 10F
阿最下層的遞迴不就是1*fact(0),你又寫成fact(0) retu
03/14 10:20, 10F

03/14 10:20, 4年前 , 11F
rn 0,不就變成1*0,那每一層都是*0阿
03/14 10:20, 11F

03/14 10:23, 4年前 , 12F
而且0!也會是1,這個從最根本的地方就錯了吧
03/14 10:23, 12F

03/14 14:32, 4年前 , 13F
你一年的最後一小時賺 500 塊你年薪就 500 嗎 XD
03/14 14:32, 13F

03/14 21:59, 4年前 , 14F
pool大網址裡的解釋這樣我就懂了!感謝!!
03/14 21:59, 14F

03/14 22:00, 4年前 , 15F
這邊感謝大家的回覆^_^
03/14 22:00, 15F

03/14 22:31, 4年前 , 16F
於是這裡再來推廣觀念: 遞迴就是數學歸納法
03/14 22:31, 16F

03/14 22:31, 4年前 , 17F
fact(0) return 0 的問題就是基礎狀況不一樣所以結果不一樣
03/14 22:31, 17F

03/31 15:33, 4年前 , 18F
查一下阿卡曼方程 實做上不會很難很雜 做完這個會很
03/31 15:33, 18F

03/31 15:33, 4年前 , 19F
清楚理解遞歸背後的運作機制
03/31 15:33, 19F
文章代碼(AID): #1UQwrjqb (C_and_CPP)