A recursive solution will make use of itself until a

**base case** is reached. So, you

**keep asking it to ask itself** to do stuff until it reaches a known case, at which point it is done. For example, to multiply two positive integers, consider this recursive example:

int Multiply(int a, int b)
{
if(a == 1) return b;
return Multiply(a - 1, b) + b;
}

You could add error checking for negative and zero numbers or what have you, but that's not the point. First, you provide a base case (any number times 1 will be that number). Then, you call Multiply with a different value, assuming it will return the proper value to you. Once you have that value, you can perform a simple addition to return the value to the current call. This function will call itself over and over,

**simplifying the problem each time**, until the base case is reached and the results are propogated up the call stack to produce the final answer.

Here is the iterative version, for comparision:

int Multiply(int a, int b)
{
int sum = 0;
while(a > 0)
{
sum += b;
a--;
}
return sum;
}

Note that it doesn't call itself. And it doesn't really have a base case (just a terminating condition).