2017-11-29 11 views
0

私の宿題は「2つの数字を取り、それらを再帰的に掛け合わせる関数を書いています」ということです。整数の解決法はウェブサイトにはほとんど質問ではありませんが、浮動小数点数は可能です。私は疑問に思う初心者のあなたはint型とあなたのマルティ機能を使用するようにフロートを「変換」することができます私のコード2フロートを再帰的に乗算することはできますか?

def multy(n, m): 
    # deals with one float situation 
    if m % 1 != 0: 
     return multy(m, n) 
    else: 
     if m == 0: 
      return 0 
     elif m < 0: 
      return -(n - multy(n, m+1)) 
     else: 
      return n + multy(n, m-1) 
+2

フロートではできないと思います。しかし、浮動小数点数をintとして表された固定小数点数に変換し、前と同じように処理することができます。必要な精度に応じて、範囲が限定されます。 – derM

答えて

1

だ、そのような可能性があるとして2をどのように扱うかを想像することはできません、そしてに戻って、それを「変換」フロート:

def fmulty(n, m): 
    nd = len(str(n).split('.')[1]) 
    md = len(str(m).split('.')[1]) 
    return multy(n * pow(10, nd), m * pow(10, md))/pow(10, md+nd) 

アイデアはnとを作ることです小数点を右にシフトして整数にします。たとえば、n = 1.234がある場合は、1,000nd=3)を掛ける必要があります。 mと同じはmdです。完了したら、multyを使用し、結果を1E(nd + md)で除算することができます。例えば、とすれば、md = 2です。結果を1E5、つまり100,000で除算する必要があります。