Won Kim
Won Kim

Reputation: 109

Reverse order recursion

I want to print out the elements in the list in reverse order recursively.

 def f3(alist):
    if alist == []:
        print()

    else:
        print(alist[-1])
        f3(alist[:-1])

I know it is working well, but I don't know the difference between

return f3(alist[:-1]) 

and

f3(alist[:-1])

Actually both are working well. My inputs are like these.

f3([1,2,3])
f3([])
f3([3,2,1])

Upvotes: 2

Views: 47

Answers (1)

Rahul P
Rahul P

Reputation: 2663

There is a difference between the two although it isn't noticeable in this program. Look at the following example where all I am doing is passing a value as an argument and incrementing it thereby making it return the value once it hits 10 or greater:

from sys import exit

a = 0
def func(a):
    a += 1
    if a >= 10:
        return a
        exit(1)
    else:
        # Modifications are made to the following line
        return func(a)

g = func(3)
print(g)

Here the output is 10

Now if I re-write the code the second way without the "return" keyword like this :

from sys import exit

a = 0
def func(a):
    a += 1
    if a >= 10:
        return a
        exit(1)
    else:
        # Modifications are made to the following line
        func(a)

g = func(3)
print(g)

The output is "None".

This is because we are not returning any value to handle.

In short, return is like internal communication within the function that can be possibly handled versus just running the function again.

Upvotes: 1

Related Questions