我有这个重复的功能,我需要使用动态编程来编写它。问题是它返回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,我知道结果是4,所以我可以将ir存储为data[1]=4;
但是当我geto到n = 6时这不起作用,因为6/5 = 1.2而我不知道知道1.2的结果是什么,我无法使用数组存储它。我可以使用字典存储键值对,但话又说回来,我不知道1.2的结果是什么。
答案 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;
}