有没有办法使用动态编程解决这个重复功能?

时间:2017-05-04 21:14:39

标签: c#

我有这个重复的功能,我需要使用动态编程来编写它。问题是它返回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的结果是什么。

1 个答案:

答案 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;
}