'Different output on recursive call using static variable [closed]

int fun1(int x){
    static int n;
    n = 0;
    if(x > 0){
        n++;
        return fun1(x-1)+n;
    }
    return 0;
}
int fun(int x){
    static int n = 0;
    if(x > 0){
        n++;
        return fun(x-1)+n;
    }
    return 0;
}

Can anyone tell me the difference between fun and fun1 ? Getting different output!!



Solution 1:[1]

  1. static int n = 0; is one time initialization

Like the snippet below,

bool initialized = false;
static int n;

int fun1(int x){
  if(!initialized){
    n = 0;
    initialized = true;
  }
  if(x > 0){
    n++;
    return fun1(x-1)+n;
  }
  return 0;
}
  1. static int n; n =0 is reset to zero on every recursive call. Like below,
bool initialized = false;
static int n;
int fun(int x){
  if(!initialized){
    n = 0;
    initialized = true;
  }
  n = 0;
  if(x > 0){
    n++;
    return fun(x-1)+n;
  }
  return 0;
}

In reality n is part of .BSS and initialized to zero at load time.

Solution 2:[2]

In fun1, n is set to 0 every time the function is called.

In fun, n is initialised to 0 at program start but thereafter only updated by n++.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 xxx
Solution 2 cpcallen