我想计算一个的阶乘const
。我想结束这样的事情:
const N: usize = 4;
const N_PERMUTATIONS = factorial(N);
Run Code Online (Sandbox Code Playgroud)
显而易见的解决方案(不起作用)是:
const fn
–不允许(或至少不实施)条件语句const fn
,以下任何一种都不会编译:
const fn factorial(n: usize) -> usize {
match n {
0 => 1,
_ => n * factorial(n-1)
}
}
Run Code Online (Sandbox Code Playgroud)
const fn factorial(n: usize) -> usize {
if n == 0 {
1
} else {
n * factorial(n-1)
}
}
Run Code Online (Sandbox Code Playgroud)宏–在所有宏扩展之后执行表达式的评估。此宏将永远不会达到基本情况,因为经过四次迭代后,参数为4-1-1-1-1
,与以下参数不匹配0
:
macro_rules!factorial {
(0) => (1);
($n:expr) => ($n * factorial($n-1));
}
Run Code Online (Sandbox Code Playgroud)我还尝试了以下方法,如果*
进行了短路评估,该方法将起作用,但是按原样进行无条件递归会导致堆栈溢出:
const …
Run Code Online (Sandbox Code Playgroud)