2015-11-10 3 views
0

Я пытаюсь написать рекурсивный метод, который принимает 3 параметра (сумма кредита, процентная ставка и ежемесячный платеж). Интерес усугубляется ежемесячно. Цель состоит в том, чтобы узнать, сколько месяцев потребуется, чтобы полностью погасить кредит. Вот код, который я до сих пор:Рекурсивный метод расчета кредита

public static double loanLength(double loan, double interest, double payment) { 
    if (payment > loan + loan * interest) { 
     return 0; 
    } else { 
     double completeLoan = loan + (loan * interest); 
     double stillOwe = completeLoan - payment; 
     if (stillOwe <= 0) { 
      return 1; 
     } else { 
      return 1 + (loanLength(stillOwe, interest, payment)); 
     } 

    } 

Примеры ожидаемых доходов включают:

loanLength (1000, 0.10, 200) погашается через 6 месяцев

loanLength (0 , 0,90, 50) составляет 0 месяцев

Но мои доходы выглядеть следующим образом:

loanLength (1000, 0,10, 200): 7 месяцев

loanLength (0, 0,90, 50): 0 месяцев

Мой второй тест работает нормально, но мой первый один только 1 целое число выше что это должно быть. Я не могу понять, почему. Любая помощь приветствуется.

+0

Я не думаю, что это лучший случай для рекурсии. Цикл будет намного легче читать (и писать). Пропуская тот факт, что этот расчет может быть выполнен в одном выражении. Это просто упражнение для практики рекурсии? –

+0

Именование ваших параметров сделает код читаемым !!!! – Andreas

+0

@JaroslawPawlak Это должно быть сделано рекурсивно для практики. Я мог бы легко сделать это в форме цикла, но я определенно борюсь с рекурсией. –

ответ

3
public static int loanLength(double loan, double interestAPR, double payment) { 
    if (loan <= 0) { 
     return 0; 
    } 
    double monthlyInterest = interestAPR/(12 * 100); 
    double compounded = loan * (1 + monthlyInterest); 
    return 1 + loanLength(compounded - payment, interestAPR, payment); 
} 

public static void main(String[] args) { 
    System.out.println(loanLength(0, 0.90, 50)); // 0 
    System.out.println(loanLength(1000, 10.0, 200)); // 6 
    System.out.println(loanLength(1000, 0.1, 200)); // 6 (FWIW) 
} 

Пожалуйста, обратите внимание, что интерес апрелю выражается как, то есть кредит $ 10000 на 10% годовых и $ 500 ежемесячных платежей рассчитывается как

loanLength(10000, 10.0, 500); 

If 0.10 = 10% годовых, то изменение эта линия

double monthlyInterest = interestAPR/12; 
+0

Хорошая работа, я пытался сам ее закодировать, это очень хорошо –

+0

Почему вы также делите на 100? Похоже, его ввод уже выражен десятичным ... 0.10 = 10% годовых? –

+0

@JeremyWest - потому что это [коэффициент конверсии] (http://smallbusiness.chron.com/convert-annual-interest-rate-monthly-rate-1822.html) –

Смежные вопросы