采用两种方法进行求解面积,递归与循环
探索中发现递归的使用时间比循环的使用时间长
from typing import Callable,Union
import sys
import time
sys.setrecursionlimit(10000)
def getArea(func:Callable[[Union[int,float]],Union[int,float]],
x_start:Union[int,float],
x_end:Union[int,float],
steps:int)->Union[float]:
x1 = x_start
x2 = (x_end - x_start)/steps + x1
if (steps == 1):
return ((x_end - x_start)/steps)*(func(x_end)+func(x_end-(x_end - x_start)/steps))/2
return (x2 - x1)*(func(x2) + func(x1))/2 + getArea(func,x2,x_end,steps-1)
def get_area(func:Callable[[Union[int,float]],Union[int,float]],
x_start:Union[int,float],
x_end:Union[int,float],
steps:int)->Union[float]:
x1 = x_start
dis_x = (x_end - x_start) / steps
area = 0
for i in range(steps):
x2 = x1 + dis_x
area += (func(x2) + func(x1))*dis_x/2
x1 = x2
return area
timelabel = time.time()
for i in range(100):
getArea(lambda x:x**2,1,10,6000)
time2 = time.time() - timelabel
timelabel = time.time()
for i in range(100):
get_area(lambda x: x**2, 1, 10, 6000)
time3 = time.time() - timelabel
print("函数1的时间{0},函数2的时间{1}".format(time2,time3))
output:
函数1的时间1.067819356918335,函数2的时间0.5800333023071289