2012-11-06 9 views
0

회귀 코드를 반복 코드로 "변환"하고 싶습니다. 예는 다음과 같습니다회귀 코드를 회귀 코드로 바꾸기

public int CalcTime(double AnnualIncome, int Time, double Value) 
{ 
    if (AnnualIncome/12 > Value/Time) 
     return Time; 
    else 
     return CalcTime(AnnualIncome, Time + 1, Value); 
} 

내가 시도했지만 할 수 없었다 ...

대단히 감사합니다!

+0

위의 진술에서 "변형"과 "예"에 대한 설명이 필요합니다. 반복적으로 예제를 다시 작성하거나 샘플 소스 코드를 반복적 인 예제로 프로그래밍 방식으로 변환하는 방법을 찾고 계십니까? –

+0

그것이 어떻게 잘못 되었습니까? – woz

+1

@woz 스택을 날리기 쉽다. –

답변

6

이 시도 :

@CodesInChaos로 또한
public int CalcTime(double AnnualIncome, int Time, double Value) 
{ 
    while (AnnualIncome/12 <= Value/Time) 
    { 
     Time++; 
    } 
    return Time; 
} 

위의 의견에 지적, 가장 좋은 방법은 소문자 변수 이름 지시 : 가장 쉽게 수행되고 반복하는 순환에서

public int CalcTime(double annualIncome, int time, double value) 
{ 
    while (annualIncome/12 <= value/time) 
    { 
     time++; 
    } 
    return time; 
} 
+0

정상적인 입력 값을 찾습니다. 'AnnualIncome'이나'Value'가 유한 한가 아닌가,'Time <= 0' ('a <= b'와'! (a> b)'가 동일하지 않은 경우)일지도 모릅니다. 그러나이를위한 올바른 해결책은 매개 변수 유효성 검사입니다. – CodesInChaos

1

변환을 자신의 스택으로 CPU 자연 호출 스택을 에뮬레이션합니다. 이것은 재귀 함수로 자연스럽게 해결되는 문제에 유효합니다. (이것이 가장 올바른 접근법이 아닙니다.)

(이 코드를 컴파일하거나 실행해야한다고 생각하지 않습니다.이 코드는 단지 예제 일뿐입니다. 어떻게해야한다고 생각합니까?)

Stack stack; 
int time = 1; 
stack.add(time); 

while(!stack.isEmpty) 
{ 
    currentTime = stack.pop(); 

    if(AnnualIncome/12 > Value/currentTime) 
     return currentTime ; 
    else 
    { 
     stack.push(time+1); 
    } 
}