想一想:如果我告诉你sum之前的情况number,你能告诉我sum当前的情况number吗?如果我告诉你sum(4) = 10,那是sum(5)什么?好吧,很清楚sum(5) = 5 + sum(4) = 5 + 10 = 15.
这是另一个挑战:基于此,你能计算出来sum(7)吗?嗯,显而易见sum(7) = 7 + sum(6) = 7 + 6 + sum(5) = 7 + 6 + 15 = 28- 我们已经"知道"价值的事实sum(5)意味着我们可以直接替代它(至少为了我们的手工计算的目的).
你有它:如果我在序列的某个地方给你一个任意数字,你就会知道序列中的值后来与它有什么关系.然后,您可以使用它来生成更多值.事实上,无论是谁写了这个,都给了我们序列中的第一个值:sum(1) = 1.这(至少在理论上)允许我们为任何自然数生成总和.*(参见下面的警告).
顺便提一下,以下for循环基本相同:
public static int forSum(int number)
{
int ret = 0;
for (int i = number; i >= 1; i--)
{
ret += i;
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
我鼓励您使用您最喜欢的调试器来完成此操作,以说服自己就是这种情况.
顺便提一下,以下内容可能会有所帮助:什么是调试器,它如何帮助我诊断问题?
* 警告:实际上,我们实际上无法使用它来生成任何自然数的总和,因为我们最终会遇到以下几个问题之一:
int.但是,我们仍然有解决方案的数学规范:sum(10^20) = 10^20 + sum(10^20 - 1)- 我们没有时间来计算它.
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |