gpt4 book ai didi

c - C中的尾递归

转载 作者:行者123 更新时间:2023-12-02 06:24:02 26 4
gpt4 key购买 nike

我正在尝试编写递归函数,以查找数字的阶乘。

    int factorial(int input,int *answer)
{
if ( input ==0 )
{
return 0;
}

*answer = *answer * input;
factorial(input -1, answer);
}

你对这个功能有什么看法?是尾递归吗?

最佳答案

在执行尾递归函数(尤其是尾递归函数)时,除了另一个具有更友好界面的函数之外,还有一个辅助函数通常会很有帮助。友好的接口(interface)函数实际上只是设置不太友好的函数的参数。

static unsigned factorial_helper(unsigned input, unsigned acc) {
if (intput == 0) {
return acc;
}
return factorial_helper(input-1, acc * input);
}

unsigned factorial(int input) {
if (input < 0) {
do_something_bad();
}
return factorial_helper(input, 1);
}

通过传递累加器值,您可以避免在从被调用函数返回时必须使用指针或进行任何计算,这使得函数真正尾递归。

关于c - C中的尾递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3935501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com