我有一个非常奇怪的错误。我有一个非常简单的数字计数功能。如果我这样做,该函数将进入无限循环:
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 ++编译。
答案 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)
递归函数需要两件事:
在你的第一个例子中,你有终止条件num != 0
...但不是@WorldSEnder所指出的还原子句(num
完全不受影响)。
此外,在递归中没有反对迭代的规则......但它通常会使事情变得更加复杂。