У меня есть следующий код, который возвращает количество узлов в дереве, когда полное двоичное дерево имеет 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
вместо кажущегося случайного числа, которое я ожидал бы от переполнения.
Я не совсем уверен, как отлаживать это, поскольку он рекурсивный, и интересующее меня значение будет оцениваться только после того, как функция достигнет базового.