为什么我需要在此代码中使用局部变量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
答案 0 :(得分:5)
因此,为了使此代码有效,您需要了解三件事:您要计算的数字(num
),数字的当前值(i
)和当前总和从0到i
。 result
是跟踪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变量的情况下离开(但代码的含义可能不那么明显),但如果你能找到一个不需要循环的方法,你只能在没有结果变量的情况下离开。