为什么这个长溢出到 -1,而不是类型的最小值?
2022-09-01 13:38:39
我有以下代码,当完整的二叉树层高时,返回树中的节点数:layer
public static long nNodesUpToLayer(int layer) {
if (layer < 0) throw new IllegalArgumentException(
"The layer number must be positive: " + layer );
//At layer 0, there must be 1 node; the root.
if (layer == 0) return 1;
//Else, there will be 1 + 2 * (the number of nodes in the previous layer) nodes.
return 1 + (2 * nNodesUpToLayer(layer - 1));
奇怪的是,当我输入函数(产生这个的最小值)时,它会给我。在 ,它回馈,所以这似乎是由溢出引起的。63
-1
62
9223372036854775807
难道它不应该给我返回Java的long的最小值+它被溢出的量吗?无论我给它输入(通过),它总是会返回,而不是我期望从溢出中获得的看似随机的数字。62
-1
我不完全确定如何调试它,因为它是递归的,并且我感兴趣的值只有在函数达到基本情况后才会被评估。