这是用于检查数字是否为正整数的代码。为什么行得通?
static bool IsSquare(int n) { int i = 1; for (; ; ) { if (n < 0) return false; if (n == 0) return true; n -= i; i += 2; } }
因为所有理想平方都是连续奇数的和:
等等。您的程序尝试从中减去连续的奇数n,然后看它是否降为零或变为负数。
n
您可以通过绘制带有边的正方形作为非正式证明,{1,2,3,4,...}并观察到k+1从正方形构建正方形k需要添加2k+1单位正方形。
{1,2,3,4,...}
k+1
k
2k+1