The following function I wrote causing the program to crash due to the stack overflow, although the recursion is finite.
public static void Key(char[] chars, int i, int l, string str) {
    string newStr=null;
    for(int j=0; j<l; j++)
        newStr+=chars[i/(int)Math.Pow(68, j)%68];
    if(newStr==str)
        return;
    Key(chars, ++i, l, newStr);
}
When I call the method with these parameters, all goes fine:
Key(chars, 0, 4, "aaaa");
But when it comes to bigger number of calls, it throws the StackOverflowException. So I assume the problem is that althogh the method is finite the call stack gets filled up before the the methods' job is done. So I have a few questions about that: 
- Why the functions don't get clear from the stack, they are no longer needed, they don't return any value. 
- And if so, is there a way i could clear the stack manually? I tried the - StackTraceclass but it's helpless in this case.
 
     
     
     
     
     
    