# Recursion - declaring a variable in the body or using it as a parameter?

What is the difference between this recursive function:

```
int foo (int n,int sum)
{
if (n==0)
return sum;
int temp;
cin>>temp;
return foo(n-1,sum+temp);
}
int main()
{
...
...
foo(n,0);
...
...
}
```

and this one:

```
int foo (int n,int sum, int temp)
{
if (n==0)
return sum;
cin>>temp;
return foo(n-1,sum+temp,temp);
}
int main()
{
...
int temp;
foo(n,0,temp);
...
...
}
```

which is more efficient in terms of spatial complexity? do they make any difference at all? can we say that recursive calls make a copy of the parameters, declaring a variable in a function is the same as using it as a parameter?

source to share

In terms of memory consumption, the function parameter is identical to a local vartiable. That is, there is no difference between the two in terms of memory consumption, other than what you have injected into a `main`

completely unnecessary local variable.

However, the second option might be less efficient in those days, since at each level of recursion, you pass the current value `temp`

to the next level of recursion. This value is not used at all (the one received from `main`

not even initialized), which means that any CPU attempts spent transferring it are completely lost.

source to share