0
我已经尝试过但未能这样做。我能朝正确的方向推动吗?使用连续减法分割两个数字的递归函数
我已经尝试过但未能这样做。我能朝正确的方向推动吗?使用连续减法分割两个数字的递归函数
我应该先强调一下,这通常是递归的一个非常糟糕的用法。最好的递归解决方案倾向于相当快地减少解决方案的“搜索空间”,例如二进制搜索在每次迭代中删除剩余搜索空间的一半。
如果减数与减数相比相对较小(其中minuend - subtrahend
给出了差异),则会产生大量递归调用,并且很可能会耗尽您的堆栈空间。
说了这么多,下面的解决方案是在伪代码而已,因为它可能是功课:
def divu (a, b):
if a < b return 0
return divu (a - b, b) + 1
它通过反复地从a
减去b
,并且下降的水平,直到你不能再从a
中减去b
而不会变负。然后它返回递归树,为每个关卡添加1。
这将只和a
非负值(因此divu
名无符号)的b
正值工作,虽然固定它底片和除以零是只有一点点额外的工作。
一些提示进行操作标志和错误:
-a/-b
视为a/b
。-a/b
作为-(a/b)
。a/-b
设为-(a/b)
。a/b
。这是可能的处理在一个单一的递归调用这些特殊的情况,但在每个水平递归增加了不必要的检查。这也可能是更有效地提供检查功能div
然后可以调用divu
做递归位,是这样的:
def div (a, b):
if b == 0
exit with error
if a < 0 and b < 0:
return divu (-a, -b)
if a < 0:
return -divu (-a, b)
if b < 0:
return -divu (a, -b)
return divu (a, b)
你能告诉我们你尝试,你怎么失败,澄清问题? – GManNickG 2009-11-24 06:03:43
这是为什么关闭为“不是一个真正的问题”?似乎对我完全有效。 – paxdiablo 2009-11-24 06:16:21