這就是我所擁有的
let base = 10000
let yearly = 31557600
let apy = 0.09
let loop = 0;
let new_base = '0';
function recurse(base){
new_base = base*(1 apy*1/(yearly));
if(loop < 3600){
loop ;
return recurse(new_base);
}
else {
return new_base;
}
}
base = recurse(base);
console.log(base);
如果我將 3600 更改為一個非常大的數字,我會收到錯誤:超出最大呼叫堆疊大小
這對我來說似乎很正常,因為遞回操作執行了太多次,
解決方案是什么?例如,是否可以將遞回函式轉換為線性函式?
謝謝
uj5u.com熱心網友回復:
好吧,它可以轉換為方程,但不能轉換為線性方程。
這是方法:
我將基礎重命名為 b0,新基礎重命名為 b1
b1 = b0 * (1 (apy/yearly)
在回圈增加后,新的基數將被更新,我們將新的 b1 稱為 b2:
b2 = b1 * (1 (apy/yearly))
b2 = b0 * (1 (apy/yearly))^2
等等..
所以最終的回傳值將是:
基數 * (1 (apy/yearly))^3600
和一般公式將是
base * (1 (apy/yearly))^n,在你的情況下,n 是 3600。
插入插入的常量將得到 10,000.102669931423184360664719158
如果它解決了您的問題,請記住對此答案進行投票。
uj5u.com熱心網友回復:
你需要遞回嗎?不。
function recurse2(base){
new_base = base*(1 apy*1/(yearly));
for(loop = 1; loop < 100; loop ){
new_base = base*(1 apy*1/(yearly));
}
return new_base;
}
你甚至沒有尾優化。這只是一個不斷變化的值。您不需要新的堆疊幀(函式呼叫)來改變所述值,只需回圈它即可。
我是如何達到這個功能的?想想base當你傳入它時會發生什么以及它如何隨著每個“遞回”而變化。它只是每次都乘以某個運算式。所以我們可以回圈執行。
你甚至可以改進我在這里的代碼片段do {} while();
以下螢屏截圖顯示了快速測驗,顯示我撰寫的函式 recurse2 是相同的*。

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/495643.html
標籤:javascript 递归 数学
