2017-10-10 127 views
0

我试图在这个利率计算器上使用递归。现在它会打印费率和每月付款等事情,但我希望它能够打印每个月的付款金额和其他所有内容(而不仅仅是总额),直到用户不必支付更多费用为止。有没有办法做到这一点使用递归?斯卡拉:使用递归的利率计算器

import io.StdIn._ 

println("Enter the house loan ammount: ") 
val loan = readInt() 

println("Enter the number of years you want to take to pay off the loan: ") 
val years = readInt() 

println("Enter the annual interest rate") 
val interestRate = readInt() 

val monthlyPayment = (loan*(interestRate/12))/(1- 
(1+interestRate/12)^years*12) 

val totalPayment = monthlyPayment*years*12 

def monthlyPayment2(monthlyPayment:Int):Unit = { 
if (monthlyPayment>0){ 
    println(monthlyPayment) 
monthlyPayment2((loan*(interestRate/12))/(1-(1+interestRate/12)^years*12)) 
} 
} 
println ("The monthly payment is:"+monthlyPayment) 
println("The total payment is:" + totalPayment) 

回答

0

月付是一样的每月(除,也许是最后一个),所以,如果你知道的金额,这是很简单的:

@tailrec 
final def printMonthly(
    principal: Double, 
    amount: Double, 
    month: Int = 1 
): Unit = { 
    val paid = amount*(month-1) 
    val left = principal - paid 
    if(left <= amount) { 
    println(s"$month: Payment: $left, Total: $principal, Remaining: 0") 
    } else { 
    println(
    s"$month: Payment: $amount, Total: ${paid + amount}, Remaining: ${left-amount}" 
    ) 
    printMonthly(principal, amount, month+1) 
    } 
}