C ++数字计数奇怪的错误

时间:2015-07-01 01:07:24

标签: c++ while-loop

我有一个非常奇怪的错误。我有一个非常简单的数字计数功能。如果我这样做,该函数将进入无限循环:

int numOfDigits(int num, int count)
{
    while(num != 0) {
        count++;
        numOfDigits(num/10, count);
    }
    return count;
}

但它的工作原理如下:

int numOfDigits(int num, int count)
{
    while(num != 0) {
        count++;
        num /=10;
        numOfDigits(num, count);
    }
    return count;
}

我尝试使用gdb但无法弄清楚。我在Ubuntu 14.04上用g ++编译。

3 个答案:

答案 0 :(得分:4)

while(num != 0) {
  count++;
  numOfDigits(num/10, count);
}

这个while循环永远不会终止,因为num实际上从未被修改过。因此,如果条件首先不是假的话,它将永远不会退出循环。

答案 1 :(得分:4)

count

我已将while更改为通过引用传递,但实际上并不是必需的。由于num未在该上下文中进行修改,因此Option Explicit Sub test() Const ROW_OFFSET As Byte = 2 Dim cel As Range Dim rng1 As Range Dim rng2 As Range Dim cRow As Long Dim lRow As Long Set rng1 = Range("G" & ROW_OFFSET & ":G" & Range("G" & Rows.Count).End(xlUp).Row) Set rng2 = Range("D" & ROW_OFFSET & ":D" & Range("D" & Rows.Count).End(xlUp).Row) With Application.WorksheetFunction For Each cel In rng1 If .CountIf(rng1, cel) > 1 Then If .CountIf(rng2, rng2.Cells(cel.Row - (ROW_OFFSET - 1), 1)) = 1 Then cel.Interior.ColorIndex = 6 End If End If Next cel End With End Sub 循环无限循环。你正在混合迭代和递归。

答案 2 :(得分:0)

递归函数需要两件事:

  1. 终止条件
  2. 减少条款
  3. 在你的第一个例子中,你有终止条件num != 0 ...但不是@WorldSEnder所指出的还原子句(num完全不受影响)。

    此外,在递归中没有反对迭代的规则......但它通常会使事情变得更加复杂。