For the following functions that use addition assignment, the value of ans is always changed to 1 when an integer greater than 1 is passed
let ans = 0;
function reduce(num){
if(num == 0){
return 0;
}
ans += reduce(num-1);
return 1;
}
reduce(5);
console.log(ans); // 1
But when I save the recursive result to another variable first, the function works fine (ans will be changed to num-1)
let ans = 0;
function reduce(num){
if(num == 0){
return 0;
}
let tmp=reduce(num-1);
ans += tmp;
return 1;
}
reduce(5);
console.log(ans); // 4
How does this happen? Is this a feature of Javascript or a bug in the environment?
I have tried similar C codes and they all behave the same
#include<stdio.h>
int reduce(int num);
int ans;
int main(){
ans = 0;
reduce(5);
printf("%d",ans); // 4
}
int reduce(int num){
if(num == 0){
return 0;
}
int tmp=reduce(num-1);
ans += tmp;
// ans += reduce(num-1);
return 1;
}
Environment:
- Microsoft Edge 97.0.1072.55
- JavaScript V8 9.7.106.18