让我们考虑一个定义如下的函数:
f(n, x) = F(n, x, f(n-1, x))
f(0, x) = g(x)
在我的程序中, 的值n
在编译时总是已知的。我想优化我的程序并避免此函数中的循环或递归调用。整个表达式f(n, x)
应该在编译时生成,以便编译器对其进行优化。
直接的解决方案是“手动”生成一个包含该表达式和使用mixin
语句的字符串。我不喜欢这种方式。
编译器是否能够/应该展开具有已知深度的递归?
即会按照我想要的方式优化以下功能:
double f(uint n)(double x)
{
static if(n == 0)
return g(x);
else
return F(n, x, f!(n-1)(x));
}