2011-11-02 5 views
1

투자 수익률을 재귀 적으로 계산하는 방법, 원금을 알 수없는 비율 및 기간 만 알고있는 방법을 알아낼 수 없습니다.RoR (Recursive Return of Return)

예를 들어, 10 % (또는 0.1)에서 2 년간 투자 한 경우 RoR은 0.21 (또는 21 %)와 같습니다. 이것은 (난 단지 최종 계산을 알고 싶지 수 있기 때문에

0.21 = 2 * 0.1 + (0.1^2) 
// or 
ror = duration * rate + (rate^duration) 

, 비 반복적으로 계산하지만 투자의 간헐적 년, 나는 재귀 적으로이 작업을 수행해야합니다 예를 들어 기간 5 년의 경우, I 첫 해, 두 번째 해 이후의 수익률이 무엇인지 알고 싶습니다.) 이 알고리즘을하기 때문에

, C 번호가 필요하지 않습니다,하지만 나는 그것을 프로그래밍 될 것입니다

+0

왜 지속 기간 = 1,2,3, ...에 대한 RoR을 계산하지 않습니까? 재귀가 필요하지 않습니다. – svick

답변

2

반복적으로 계산하는 가장 쉬운 1.0 +의 RoR된다.

double calculateRateOfReturnPlus1(double rate, int periods) { 
    if (periods == 0) 
    return 1.0; 
    return (1.0 + rate) * calculateRateOfReturnPlus1(rate, periods - 1); 
} 

이 반환 속도 = 0.1의 경우 1.21, 기간 = 2의 경우 1.331, 기간 = 0.1의 경우 1.331. 그런 다음 1.0을 빼서 순수 RoR을 얻을 수 있습니다. 또는, 다음과 같이 직접의 RoR을 계산할 수

double calculateRateOfReturn(double rate, int periods) { 
    if (periods == 0) 
    return 0.0; 
    return (1.0 + rate) * (calculateRateOfReturn(rate, periods - 1) + 1.0) - 1.0; 
} 

를 또한, 이와 같이 반복의 RoR을 계산할 수

double calculateRateOfReturn(double rate, int periods) { 
    double RoR = 1.0; 
    for (int i = 0; i < periods; i++) { 
    RoR = RoR * (1.0 + rate); 
    } 
    return RoR - 1.0; 
} 

마지막 두 함수는 율 = 0.1 내지 0.21을 돌려주기 = 2 및 0.331 rate = 0.1, periods = 3.

는 하나는 단순히 Math.Pow() 기능에 의존하는 것이 실제로

: 나는 스프레드 시트에서 유사한 "모델"을 한 적이

double calculateRateOfReturn(double rate, int periods) { 
    return Math.Pow(1.0+rate, periods) - 1.0; 
} 
+0

이제 몇 년 동안의 변화율 (예 : 연도 1 = 0.1, 연도 2-4 = 0.08, 연도 5 = 0.02 등)을 계산하고 다른 데이터 세트와 비교할 때 재미가 시작됩니다. 당신의 도움을 주셔서 감사합니다! – bafromca

+0

요금이 변하면 요금을 모든 연도의 요금 배열로 대체해야합니다. 이것은 iteration 형식에서 가장 쉽습니다. 반복 변수 i를 사용하여 각 연도/반복마다 배열에서 올바른 비율을 검색 할 수 있습니다. 재귀 적 형식에서는이를 위해 다른 인수가 추가되어야합니다. –

-1

하고,이 작업을 수행하는 가장 쉬운 방법은 매년 복리를 계산하는 것입니다 , 그리고 나서 다른 열에서 연속 년 간의 차이를 계산하십시오.

재귀를 사용하여 연간 (또는 다른 기간)을 계산하려면 다음 기간의 주체로 계산 결과 (1로 시작)를 입력 할 수 있습니다.

그래서 기간 0 "속도"한 것, 다음 기간 1 1.1 것, 기간 2는 것입니다 1.21 등

1

LINQ 버전 :

double rate = 0.1; 
int totalYears = 5; 

var results = Enumerable.Range(1, totalYears).Select(i => new { Year = i, RoR = Math.Pow(1 + rate, i) - 1 }); 

이 당신에게 수익률을 제공합니다 그 기간 내내 매년.