2016-10-12 5 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 + 1にNを更新し、florec(X時に呼び出すことができますどのように、 (N + 1)* y)となる。次に、N + 1をN + 2に更新し、florec(x、(N + 2)* y)などを呼び出す。

現時点ではかなり気になっていると感じていますので、今後の進め方については助けてください。

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

(それが唯一の正の浮動小数点数のために動作します。)

これはあなたの再帰の問題に対処した場合、私は知らない。

+1

これは再帰関数についての演習ですか?実生活では、モジュロ演算子( 'R = x%y')を使用します。 –

答えて

2

はここでコンピューティング・Rの再帰的な方法です。たぶん、このユースケースは再帰を説明するのに最適ではないかもしれません。

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より大きい場合にのみ作用することに注意してください。

関連する問題