2016-10-12 3 views
0

R = x - N * y를 계산하기위한 함수를 만들고 싶습니다. 여기서 x와 y는 float이고 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

재귀 함수에 대한 연습입니까? 실생활에서는 modulo 연산자 ('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보다 큰 경우에만 작동합니다.