C# 有没有办法用动态规划来解决这个循环函数?

C# 有没有办法用动态规划来解决这个循环函数?,c#,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)

我有这个循环函数,我需要用动态规划来编写它。问题是它返回的是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存储为数据[1]=4;但当我转到n=6时,这不起作用,因为6/5=1.2,我不知道1.2的函数结果是什么,我无法使用数组存储它。我可以使用字典来存储键值对,但再一次,我不知道1.2的结果是什么

我认为您可以使用字典来存储结果:

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

这里的“动态规划”是什么?我想你是在说……使用已知数据来找到下一个值等等,为什么你不能使用字典呢?Dictionary可以存储一个双键1.2和一个双键f1.2I可以存储它,但首先我需要使用我已经知道的数据计算函数值1.2,我甚至不知道这是否可能