Hi,

I am trying to do something which is really stupid :-)
I would like to count the number of occurrences of a certain character in a list.
This is more of an exercise in recursion rather than the underlying problem.
I could have used a *for* loop or simply the list *count* method.
Here is the code:

class Find_Ex():

    count = 0
    def slais(self, lst, x):
        if len(lst) == 0: #if list is empty just give a -1
            return -1
        elif lst[0] == x:
Find_Ex.count += 1 # we have found 'x', increment class attribute 'count' by 1 Find_Ex.slais(self,lst[1:], x)# slice the list and go to the next element
        else:
Find_Ex.slais(self,lst[1:], x)#'x' not found so we move to the next element
        return Find_Ex.count

s = Find_Ex()
lst = [4,4,4,5,6,7,4,7,7,4]
x = 4
print "There are %d occurrences of %d"%(s.slais(lst, x),x)

It works as advertised but I am convincing myself that it should not! :-)

If the list is empty, which is the base case, s.slais([], 4) returns -1. Now using some bush logic, in a non-empty list, in order for the recursion to terminate it has to 'hit' the base case and return -1. Where does this -1 go ? Further, why do not I get a *TypeError* when I use a simple *return* statement in the *if* clause?

The reason I am asking that is that I think(wrongly, of course :-)) it should be part of the answer and therefore I should be getting an answer that is off by one or a *TypeError*!!

And by the way, the reason I used a *class* was that I could not get a suitable place in the program to initialise my *count* variable otherwise.

Thanks...

--
Kĩnũthia

S 1º 8' 24”
E 36º 57' 36”
1522m

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to