function pow(n,to){
if(to == 0 ) return 1;
h = pow(n,to/2);
return h*h* ((to % 2) == 0 ? 1 : n);
}
このコードが 0 以外の累乗に対して無限大を返すのはなぜですか?
function pow(n,to){
if(to == 0 ) return 1;
h = pow(n,to/2);
return h*h* ((to % 2) == 0 ? 1 : n);
}
このコードが 0 以外の累乗に対して無限大を返すのはなぜですか?
無限再帰があります。関数が自分自身を呼び出していることを意味し、それを停止する条件はありません。そのため、JavaScript エンジンが停止するまで、自分自身を永久に呼び出しています。関数にコンソール ログを配置し、コンソールで監視します。
関数の再帰は決して停止しません。これは、to / 2
0 より大きい場合は 0 にならないためです。 toは、初期値 10 で呼び出すと、再帰全体でこれらの値を持つことになります。
10 -> 5 -> 2.5 -> 1.25 -> 0.625...
Math.floor()
float の小数点以下の部分を切り捨てるために使用できます。これは、あなたが望む関数です:
function pow(n, to) {
if (to == 0) {
return 1;
}
var h = pow(n, Math.floor(to / 2));
return h * h * ((to % 2) == 0 ? 1 : n);
}