2017-05-04 87 views
-5

我有這個反覆出現的功能,我需要使用動態編程來編寫它。問題是它返回double,而不是int,我不能改變它。如果它返回整數,我可以將返回的值存儲在數組中相應的索引處,然後使用它來查找其他值。有沒有辦法使用動態編程來解決這個循環函數?

static double f(double n) 
{ 
    if(n > 1) 
    { 
     return f(n - 3) + (9 * (f(n/5) * f(n/5))) + (2 * f(n - 7)) 
       + ((n * n * n * n)/2); 
    } 
    else 
    { 
     return 4; 
    } 
} 

例如如果n = 1 I知道結果是4,所以我可以IR存儲爲data[1]=4;但是當我GETO到n = 6這不起作用,因爲6/5 = 1.2和我不知道1.2的結果是什麼,我不能使用數組來存儲它。我可以使用字典來存儲鍵值對,但是再次,我不知道1.2是什麼結果。

+0

什麼在這種情況下「動態規劃」? – pm100

+0

我懷疑你在說[記憶](https://en.wikipedia.org/wiki/Memoization)... –

+0

使用已知的數據找到下一個值 –

回答

0

我想你可以使用一個Dictionary<double,double>存儲結果:

private static Dictionary<double, double> results = new Dictionary<double, double>(); 

private static double f(double n) 
{ 
    if (results.ContainsKey(n)) return results[n]; 

    double result = (n > 1) 
     ? f(n - 3) + (9 * (f(n/5) * f(n/5))) + 
      (2 * f(n - 7)) + ((n * n * n * n)/2) 
     : 4; 

    results.Add(n, result); 
    return result; 
} 
相關問題