簡體   English   中英

模運算遞歸

[英]Modulo operation recursive

為了練習一點遞歸,我嘗試用python遞歸重寫modulo函數。 20%6產量2

我嘗試通過以下方式進行處理:經常將m添加到自身中,直到變得大於a為止。 如果是這樣,請減去am並返回該值。

def mod1(a,m):
    if m == a:
        return 0
    elif m < a:
        return mod1(a,m+m)
    else: 
        return a - m

mod(20,6)
> -4

但是,我遇到的問題是, m我加上m變化。 在遞歸的第一步中,它是6+6 ,在第二次迭代中,它不是12+6 ,而是12+12 如何“保留”我的原始m ,但更新我需要更改的m

就像弗雷德里克(Frederic)所說的,您需要第三個論點

def mod1(a,m,i):
    if m*i == a:
        return 0
    elif m*i < a:
        return mod1(a,m,i+1)
    else: 
        return a-m*(i-1)

print(mod1(20,6,1))

保持帶有兩個參數的調用使函數def看起來像

def mod1(a,m,i=1)
....
print(mod1(20,6))

您可能不想從a減去,而是將m為常數。

def mod1(a,m):
    if m == a:
        return 0
    elif m < a:
        return mod1(a-m, m)
    else:
        return a

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM