2017-11-29 5 views
0

나의 숙제는 "두 개의 숫자를 취하여 재귀 적으로 곱하는 함수를 작성합니다"정수에 대한 솔루션은 웹 사이트에 몇 가지 질문으로 나타나지만 부동 소수점에 대해 가능한 것은 하나의 부동 소수점을 처리 할 수있는 코드를 작성했지만 궁금 초보자 당신은 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

의 등의 가능성이 있으므로이 처리하는 방법을 상상할 수 없다, 다음에 다시 "변환" 플로트는 :

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,000 (nd=3)을 곱해야합니다. mmd입니다. 완료되면 multy을 사용하고 결과를 1E (nd + md)로 나눌 수 있습니다. 말하자면 m = 5.67 다음에 md = 2이 있습니다. 그런 다음 결과를 1E5 (예 : 100,000)로 나눠야합니다.