вы определяете локальную переменную 'x', область действия которой ограничена блоком if, и вы пытаетесь вернуть эту переменную из функции, поэтому она становится неопределенной. Лучше определите локальную переменную x в функции и задайте ей значение по умолчанию, которое должно быть возвращено функцией.
def fi(arr,mini):
x = some_default_value
print(arr)
if(len(arr)<3):
x = mini
return
for j in range(1,(math.ceil(len(arr)/2) )):
l1 = 2*j+1
if(med(arr[0:l1])<mini):
mini= med(arr[0:l1])
print("hello", mini)
fi(arr[1:],mini)
return x