0
Help needed in this code. Explain me the code.
def merge(L): if len(L) <= 1: return L mid = len(L)//2 r = merge(L[:mid]) l = merge(L[mid:]) print(r) print(l) li = (3, 4, 5, 6, 67, 23, 46, 76) merge(li) Out: [3] [4] [5] [6] None None [67] [23] [46] [76] None None None None
2 Answers
0
Passing li to function
If len of list is <=1 then return list
Else find mid element
Then again call function with list elements from 0 to mid as passing list this recursively pass list until only one element..
It is dividing list in merge sort implementation. But actually missing merging, and sorting implementation. Take a look at
https://www.sololearn.com/learn/660/?ref=app
For more, run this code and see :
def merge(L):
if len(L) <= 1:
return L
mid = len(L)//2
print(L)
print("mid element at index=",mid)
r = merge(L[:mid]) #right list recursion
l = merge(L[mid:]) #left list recursion
print("right =",r)
print("left =",l)
li = (3, 4, 5, 6, 67, 23, 46, 76)
merge(li)
0
I hope am able to explain this stuff as clearly as possible. When you assign r and l to the recursive function, it runs for each single value but when the recursion returns, it is assigned to r and l. That is something like r = merge(L[:4]) runs for each recursion but does not store any value in r when the recursion comes back and so prints none. To fix this simply comment or remove your two print function and remove the assignment in each of the merge so that you just have :
merge(L[:mid])
merge(L[mid:])
And finally change your return L to print(L) and you are good to go.
Debugging this your code really scratched a part of my brain