下面是一段使用递归来查找产品的代码 数组中的数字,但我不知道如何递归地执行相同的尾部 有什么建议吗?
int Product(int a[], int i, int n)
{
return (i >= n) ? 1 : a[i] * Product(a, i + 1, n);
}
答案 0 :(得分:2)
在目前的形式中,您的代码不是递归递归的。递归调用必须是函数中的最后一条指令,并且在代码中,乘法发生在递归调用之后。因此,您必须更改签名以使用一个累加器来保存到目前为止的数字乘积:
int Product(int a[], int i, int n, int acc)
{
return (i >= n) ? 1 : Product(a, i + 1, n, a[i] * acc);
}
对于初始调用,您应该传递1作为累加器值。由于尾递归形式的使用非常方便,您可以将函数分离为辅助函数,并将其与实际实现分开:
int Product(int a[], int i, int n)
{
return TailProduct(a, i, n, 1);
}
int TailProduct(int a[], int i, int n, int acc)
{
return (i >= n) ? 1 : Product(a, i + 1, n, a[i] * acc);
}