繁体   English   中英

递归C ++函数

[英]Recursive c++ function

我正在尝试创建如下的递归函数。

该函数需要一个计数器k ,并且只要计数器大于零,我就希望递归调用它,以便最终我得到如下所示的结果:

result = 2(2(2n+1)+1)+1

其中最后一个n(当k = 0时)应为零。

int pass(int k, int n)
{
    if(k==0)
    {
        n = 0;
    }
    else
    {
        k--;
        return pass(k, 2*n+1);
    }
}

有人可以给我提示如何做吗?

更改

n = 0;

return n;

返回结果。

其余代码很好

当前,代码的行为是不确定的,因为您没有在所有控制路径上显式返回值。

您的代码可以简化为:

int pass(int k, int n)
{
    return k ? 2 * pass(k - 1, n) + 1 : 1;
}

在这里,我使用了三元条件运算符 如果k非零,则返回2 * pass(k - 1, n) + 1 ,否则返回1。

在这种情况下,请注意不要溢出您的int 请注意,一个int的最大大小可以小到32767。请考虑改用long类型。

另外,请注意,递归通常不是解决O(n)类型问题的好方法; 由于超出了函数调用堆栈的限制,因此在运行时可能会出错:请考虑折叠为循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM