[英]Recursive function that divides two numbers, using successive subtraction
我已經嘗試過,但是沒有成功。 我可以朝正確的方向推進嗎?
我首先要強調的是,這通常對於遞歸來說是一個非常糟糕的用法。 最好的遞歸解決方案往往會相當快地減少解決方案的“搜索空間”,例如二進制搜索每次迭代都會刪除一半的剩余搜索空間。
如果subtrahend與minuend相比較小(其中minuend - subtrahend
為您帶來了區別),則重復減法將導致大量遞歸調用,並且很可能會耗盡堆棧空間。
話雖如此,以下解決方案僅是偽代碼,因為它可能是家庭作業:
def divu (a, b):
if a < b return 0
return divu (a - b, b) + 1
它通過反復減去b
從a
和下降的水平,直到你再也不能減去b
從a
沒有去負。 然后,它返回遞歸樹,為您進入的每個級別加1。
這將僅適用於非負值工作a
和正值b
(因此divu
無符號的名稱),但固定它底片和除以零是只有一點點額外的工作。
處理符號和錯誤的一些提示:
-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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.