我试图通过添加一个参数来使这段代码尾递归,但我不是 100% 确定如何实现 1 + recusrive 调用部分

问题描述

我需要通过添加一个参数来使这个尾部递归,但我不确定要采取的第一步。

int countVal (int A[],int size,int val)
{
    if (size == 0)
        return 0;
    else if (A[size - 1] == val)
        return 1 + countVal(A,size-1,val);
    else
        return countVal(A,size - 1,val);
}

解决方法

添加的参数应该累加结果,当递归终止时返回累加结果而不是基值。
在这种情况下,您可以将基值作为默认参数值:

int countVal (int A[],int size,int val,int accumulator = 0)
{
    if (size == 0)
        return accumulator;
    else if (A[size - 1] == val)
        return countVal(A,size - 1,val,accumulator + 1);
    else
        return countVal(A,accumulator);
}

但使用单独(和隐藏)的辅助函数也很常见。