c++ - 我应该如何在没有反复试验的情况下解决这个递归问题

标签 c++ algorithm recursion

int sum_down(int x)
{
    if (x >= 0)
    {
        x = x - 1;
        int y = x + sum_down(x);
        return y + sum_down(x);
    }
    else
    {
        return 1;
    }
}

参数 x 的最小整数值是多少,以便返回值大于 1.000.000?

现在我只是通过反复试验来做这件事,因为这个问题是通过纸质形式提出的。我认为我没有足够的时间进行反复试验。问题是,你们如何快速将其可视化以便轻松解决。谢谢大家,我是编程新手,所以提前致谢!

最佳答案

递归逻辑:

x = x - 1;
int y = x + sum_down(x);
return y + sum_down(x);

可以简化为:

x = x - 1;
int y = x + sum_down(x) + sum_down(x);
return y;

可以简化为:

int y = (x-1) + sum_down(x-1) + sum_down(x-1);
return y;

可以简化为:

return (x-1) + 2*sum_down(x-1);

放入数学形式,

f(N) = (N-1) + 2*f(N-1)

N-1 时递归终止。 f(-1) = 1

因此,

f(0) = -1 + 2*1 = 1
f(1) =  0 + 2*1 = 2
f(2) =  1 + 2*2 = 5

...

f(18) = 17 + 2*f(17) = 524269
f(19) = 18 + 2*524269 = 1048556

关于c++ - 我应该如何在没有反复试验的情况下解决这个递归问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33096018/

相关文章:

algorithm - 在什么情况下我应该使用尝试而不是二叉树/哈希表?

algorithm - 深度优先搜索递归或迭代

java - 如何在java中随机打开迷宫线

java - 调用递归方法的无法访问的语句

c++ - C++ 标准的核心语言规范中的注释和示例是否非规范?

c++ - C++中的对象创建和成员声明

algorithm - 具有信号强度的 2D 平面中的三边测量

c# - 快速算法找到 x 最接近平面上给定点的点

c++ - C++文件输入/输出控制台输出

c++ - 如何将类的方法传递给 C++ 中的另一个函数?