[問題] 遞迴報錯不能除以0的問題

作者: gene50814 (genechen)   2019-02-14 10:35:48
小弟新手想寫一個簡單的dynamic prgram的遞迴式
Code如下:
def v(r,b):
rprob = r/(r+b)
bprob = b/(r+b)
if r ==0 and b == 0:
return 0
else:
return max(0, rprob-bprob+rprob*v(r-1,b)+bprob*v(r,b-1)
試運行之後一直報錯division by zero
會有除以0的情況只發生在r跟b都是0,而一開始已經給定v(0,0) return 0了, 為什麼還
會報錯呢? 請大大指點一下小弟哪裡需要修正 謝謝! 手機排版 傷眼抱歉
作者: AlaRduTP (Eden)   2019-02-14 10:49:00
可以想一想是先算除法,還是先判斷能不能除
作者: germun (ger)   2019-02-14 11:10:00
還沒判斷就先除了
作者: shiyeh (shiyeh)   2019-02-14 11:37:00
哪裡"一開始"就給定v(0,0) return 0 了,你是先做運算才做if判斷不是?
作者: XperiaZ6C (真●安卓輕旗艦)   2019-02-14 13:15:00
你是先除才判斷,而且為什麼不用try-except
作者: Akkusaii3741 (烤雞好吃)   2019-02-14 22:19:00
樓上 好奇問一下 try except 不是少用為妙嗎
作者: lajji (喇機)   2019-02-14 23:54:00
少用為妙?誰這樣說的?
作者: AndCycle (AndCycle)   2019-02-15 00:19:00
唯一要少用的情境是你全攔下來又不處理
作者: rofellosx (鏖)   2019-02-15 08:52:00
我也第一次聽到少用為妙try except
作者: Neisseria (Neisseria)   2019-02-15 08:58:00
就算不用 try 區塊也是要先判斷啊C 語言沒有 try 區塊也是用一般的控制結構來處理
作者: sean50301 ( (づ′・ω・)づ)   2019-02-15 09:28:00
try except可以用啊 只是要知道except了哪些東西跟風險多大就好
作者: XperiaZ6C (真●安卓輕旗艦)   2019-02-15 16:46:00
回6F,應該是少用except all
作者: s860134 (s860134)   2019-02-16 00:39:00
不是少用為妙嗎(X 知道自己在用甚麼(O
作者: gene50814 (genechen)   2019-02-16 04:43:00
啊if在前面也是一樣報錯 我會試試try except 感謝
作者: kingofage111 (鴕鳥)   2019-02-16 11:55:00
把rporb跟bporb的運算寫到else裡面呢
作者: s860134 (s860134)   2019-02-16 15:59:00
v(1,-1) 當 r=-1 * b 你的計算就爆了
作者: lajji (喇機)   2019-02-16 17:56:00
所以還是用except ZeroDivisionError比較好

Links booklink

Contact Us: admin [ a t ] ucptt.com