等额本金是递归逆推的一个方法:
父亲准备4年的生活费,使且整存零取的方式,控制每月底只能提取1000元,假设银行年利息为1.71%
思路:
第48个月取出1000,则要先求出47个月时银行存款的具体金额:
第47个月的存款=1000/(1+1.71%/12)
第47个月的存款=(第47个月的存款+1000)/(1+1.71%/12)
........
第1个月的存款=(第2个月的存款+1000)/(1+1.71%/12)
pseudocode:
corpus(0)
ifterm=48then
corpus(48)=1000
elseifcorpus(n)=(corpus(n+1)+1000)/(1+%)
endif
'//程序用以计算等额本息方式
Public Out()
Public EA#, Term#, Rate#
Sub Corpus()
Dim FirstCorpus#
'每期金额,利率,期数
Dim i&
'变量
With Sheet3
EA = .Cells(1, 2): Rate = .Cells(2, 2): Term = .Cells(3, 2)
ReDim Out(0 To Term, 1 To 2)
FirstCorpus = CorpusMain(0) '求0值
'Output
.Cells(4, 2) = FirstCorpus 'answer
.Cells(7, 1).Resize(UBound(Out) + 1, UBound(Out, 2)) = Out 'process
End With
End Sub
'//递归逆推主程序
Function CorpusMain(n)
If n = Term Then
CorpusMain = EA
Else
CorpusMain = (CorpusMain(n + 1) + EA) / (1 + Rate / 12)
End If
Out(n, 1) = n: Out(n, 2) = CorpusMain
End Function