views:

100

answers:

3

What does the last line, return 1 + .... do ? How can you return 1 plus a function call?

Below is the assignments text:

These functions recursively count the number of instances of the key in the target string

def countSubStringMatchRecursive(target, key):
    currentPosition = find(target, key)
    if find(target, key) == -1:
        return 0
    else:
        return 1 + countSubStringMatchRecursive(target[currentPosition+1:], key) 
+1  A: 

Its best to think of this from the end case. Lets say you have 3 possible matches. The calls would like this,

countSubStringMatchRecursive(target, key)

  (The find operation is not -1, so call again)
  1 + countSubStringMatchRecursive(target, key)

    (The find operation is not -1, so call again)
    1 + countSubStringMatchRecursive(target, key)

      In this end case, the find operation is -1, so this function returns a 0.

    Return value at this level is now 1 + 0 = 1

  Return value at this level is now 1 + 1 = 2

 Return value at the topmost level is now 1 + 2 = 3

So as you can see, the 1+ function call is basically a way to keep track of the count.

viksit
+2  A: 

The last line isn't returning "1 plus a function call", it is returning 1 + the return value of the function, which is either 0 or 1 depending on whether the condition has been met.

It is recursive, in that the return value from the function call will be 1 + the return value of another function call -- again, and again, and again, until find(target, key) == -1.

Think of it more like:

return 1 + ( 1 + (1 + (1 + (0))))

Andrew
+1  A: 

The code that you showed does this:

currentPosition = find(target, key)
if find(target, key) == -1:

when it should be doing this:

currentPosition = find(target, key)
if currentPosition == -1:

If your teacher actually wrote that code, it's time to change schools!

John Machin
No, my teacher didn't write it. Another student did, and I looking through the code of all the students and didn't understand the 1 +
NoahClark