2016-10-12 57 views
0

我希望創建一個計算R = x - N * y的函數,其中x和y是浮點數,N是最大正整數,所以即x> N * y。創建一個計算R = x - N * y的遞歸函數,條件爲

該函數只應用x和y的輸入。

我以前通過循環創建函數,但嘗試將其轉換爲遞歸時遇到問題。我的基本思路是這樣的:

def florec(x, y): 
    if x > y: 
     R = x - N * y 
     florec(x, y_increased) 
    return R 

我的問題是,我無法弄清楚如何編寫「y_increased」,意思是,我怎麼可以更新N至N + 1,然後在florec(X呼叫, (N + 1)* Y)。然後將N + 1更新爲N + 2並調用florec(x,(N + 2)* y)等。

感覺目前還挺困難的,所以任何幫助都可以繼續前進,不勝感激。

+1

這是一個關於遞歸函數的練習嗎?在現實生活中,我會使用模運算符('R = x%y')。 –

回答

2

這裏的計算R的遞歸的方式:

def florec(x, y): 
    if x > y: 
     return florec(x-y, y) 
    return x 

(注意它僅適用於正的浮動。)

我不知道這是否解決您的遞歸問題。也許這個用例不適合用來說明遞歸。

0

如果你想在每一個增量返回一個值,你可以使用一個發電機功能:

def florec(x, y): 
    N = 30 # not sure what you want N to start with 
    while True: 
     if x > N * y: 
      yield x - N * y 
     else: 
      break 
     N += 1 

for i in florec(332.432, 5.32): 
    print i 

結果:

172.832 
167.512 
162.192 
156.872 
151.552 
146.232 
140.912 
135.592 
130.272 
124.952 
119.632 
114.312 
108.992 
103.672 
98.352 
93.032 
87.712 
82.392 
77.072 
71.752 
66.432 
61.112 
55.792 
50.472 
45.152 
39.832 
34.512 
29.192 
23.872 
18.552 
13.232 
7.912 
2.592 
0

Jerome的原創評論,功能你'描述是模數的定義。如果你絕對需要使用遞歸,以下將完成它。

def florec(x, y, N=1): 
    R = x - N * y 
    if R < y: 
     return R 
    return florec(x, y, N+1) 

>>> florec(16.6, 3.2) 
2.20000000000001 
>>> 16.6 % 3.2 
2.20000000000001 

注意上面只爲正數x和y的工作,只有當X是已經大於y。