[问题] 递回报错不能除以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