I need to add threads to this code but it doesn't work. The teacher gave advice to create a list that stores the parameters to use, but I can't figure out how to do it
a = 1
b = 3
E = 0.07
def f(x):
return x**4
def quad(left, right, fleft, fright, lr_area):
mid = (left + right)/2
fmid = f(mid)
l_area = ((fleft + fmid)*(mid - left)/2)
r_area = ((fmid + fright)*(right - mid)/2)
if abs((l_area + r_area) - lr_area) > E:
l_area = quad(left, mid, fleft, fmid, l_area)
r_area = quad(mid, right, fmid, fright, r_area)
return l_area + r_area
S = quad(a, b, f(a), f(b), (f(a) + f(b))*(b-a)/2)
print (S)
on your advice, I tried not to touch the recursion and solve the problem through streams, but I get the wrong answer. new code below
import threading
import time
a = 1
b = 3
E = 0.07
def f(x):
return x**4
def quad(left, right, fleft, fright, lr_area):
mid = (left + right)/2
fmid = f(mid)
l_area = ((fleft + fmid)*(mid - left)/2)
r_area = ((fmid + fright)*(right - mid)/2)
atribute_list = []
if abs((l_area + r_area) - lr_area) > E:
l_area1 = threading.Thread(target=quad, args=(left, mid, fleft, fmid, l_area,))
r_area1 = threading.Thread(target=quad, args=(mid, right, fmid, fright, r_area,))
l_area1.start()
r_area1.start()
l_area1.join()
r_area1.join()
time.sleep(1)
print(atribute_list)
return atribute_list
S = quad(a, b, f(a), f(b), (f(a) + f(b))*(b-a)/2)
print(S)