Count digits in a given number using recursion
pro: 


code is clean and easy to understand


con:


a recursive solution may not be optimized to a loop by your interpreter so there might be a lot of memory (stack) waste because of the recursion overhead. (So you could implement it as a loop instead of a recursion)
You do not need the if(abs(x) / 10 == 0) branch. So to simplify your code you could remove it.


Simplified recursive code:

def ndigits(x):
    # Assume for the input 0 the output is 0
    if(x == 0):
        return 0
    else:
        return 1 + ndigits(abs(x) / 10)


Simplified tail-recursive code:
end-recursive methods are likely to be detected by the interpreter and transformed to a loop. So this code might be faster and may nor waste memory.
For more information see wikipedia Tail call

def ndigits(x):
    return ndigits_(0, abs(x))

def ndigits_(s,x):
    if(x == 0):
        return s
    else:
        return ndigits(s+1, x / 10)