Algorithms and Data Structures by Niklaus Wirth have a section "When not to use recursion", but recursion is useful programmer`s tool. I think that understanding recursion is "must" for a programmer.
You have a clever approach to permutation problem. It can be solved recursively (pseudocode):
private void PermutationsRecursive(string prefix, string s)
{
int N = s.Length;
if (N > 0)
for (int i = 0; i < N; i++)
PermutationsRecursive(prefix + s[i], s.Substring(0, i) + s.Substring(i + 1, N - i - 1));
else
WriteLine(prefix);
}
PermutationsRecursive("", "carbon");