【问题标题】:Recursion, and the difference between -- and i-1 [duplicate]递归,以及 -- 和 i-1 之间的区别 [重复]
【发布时间】:2017-06-30 02:19:05
【问题描述】:

我正在做一些 C# 练习,并决定制作一个基本函数来对整数数组的内容求和。

原来我的代码是这样写的:

if(index == 0)
   return toSum[index];
else 
   return toSum[index] + sum(toSum, index--);

现在该代码导致 StackOverFlow 异常。这对我来说毫无意义;这肯定是一个人会如何做一个总结?原来问题出在index--。当我将其更改为index - 1 时效果很好,因此我想知道为什么会这样?我的理解是它只是index = index-1 的简写。我想知道是否有人可以解释这种行为背后的原因。

【问题讨论】:

  • 您如何检查您对index-- 含义的理解?你看过书或 C# 参考资料吗?
  • --indexindex = index - 1 的简写,但如果更改变量没有意义,为什么要这样做?
  • 主要是我从他们在我大一编程课上教我们的方式中回忆起来的。虽然我试图自学 C#,但它是用 Java 编写的。我最长时间的理解是 index-- 是 index = index-1 的简写;
  • (此运算符在 C# 和 Java 中的工作方式相同,请注意。)
  • 我认为它只是点击了,@Ryan。由于使用递归调用,我猜你需要 --index ,因为如果递减是在它永远不会递减正确的之后?如果我将 index-- 更改为 --index ,该函数将返回正确的结果而不是溢出。

标签: c# recursion


【解决方案1】:

后递减运算符返回递减前的值,因此在您的情况下,索引永远不会为 0,并且函数不会停止调用自身,您会遇到堆栈溢出。你想改写--index。然后会在递减后返回值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 2011-01-24
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 2016-06-29
    • 2023-03-29
    相关资源
    最近更新 更多