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/