为什么在这个算术级数和代码中需要第三个变量?

时间:2016-10-09 22:25:33

标签: ruby algorithm math

为什么我需要在此代码中使用局部变量result?当我尝试仅使用2个变量时,我想我有一个无限循环,但我不知道如何在代码中识别这个问题并使用debug来理解这个问题。

#编写一个接受整数num并返回总和的方法     #all和num之间的所有整数,包括num

def sum_nums(num)
  result = 0

  i = 0
  while i <= num
    result += i
    i += 1
  end

  return result
end

2 个答案:

答案 0 :(得分:5)

因此,为了使此代码有效,您需要了解三件事:您要计算的数字(num),数字的当前值(i)和当前总和从0到iresult是跟踪0到i之和的变量。

然而,这不是编写此方法的非常重要的方法。 while循环适用于您不知道需要循环多少次的情况。在这种情况下,您知道循环的数量,因此迭代器更适合此目的。

def sum_nums(num)
  (0..num).reduce(:+)
end

上述方法将返回与您的方法相同的结果。

答案 1 :(得分:4)

在您的函数中,您使用三个变量:

num ,它包含您要进行求和的范围(或您需要循环的次数)

i ,它包含您要添加到每个循环中的总和的特定整数

结果,它保存到目前为止的总和(并且在最后一个循环结束时,保留您想要的答案)。如果没有这个变量,下一个循环将“丢失”所有先前循环已经添加到整数之和的程度。

您可以删除 i 变量,如下所示

result = 0
while num > 0 
  result += 1
  num -= 1
end
return result

这依赖于这样一个事实,即如果你从num倒计数,你知道停在0。或者你可以摆脱 i 变量和结果变量如下

return num*(num+1)/2

这取决于整数之和的代数公式,而不是明确地执行求和。这两个片段都会产生与您的功能相同的返回。

总之,你需要num变量,否则你的函数将不会“知道”总和的范围。你可以在没有i变量的情况下离开(但代码的含义可能不那么明显),但如果你能找到一个不需要循环的方法,你只能在没有结果变量的情况下离开。