直线相交问题
平面上有n条直线,任意两条不平行,任意三点不共点,求它们的交点个数和它们把平面分成互不重叠的区域个数。
解题思路:
1、交点个数。2条直线有1个交点,3条直线有3个交点,4条直线有6个交点,5条直线有10个交点,
即每新增1条直线,就与原有的n-1条直线各有一个交点。
递推公式:当前项(第n项)=前项(第n-1项)+n-1
2、互不重叠的区域数。1条直线有2个互不重叠的区域,2条直线有4个互不重叠的区域,3条直线有7个互不重叠的区域,4条直线有11个互不重叠的区域,5条直线有16条互不重叠的区域,即新增1条直线,就多增加n个区域。
递推公式:当前项(第n项)=前项(第n-1项)+n
3、采用递归的方法,程序相当简洁,但受限于递归深度的影响,n只能取到999,改为while循环。
def points_num(n):
if n < 3:
return n - 1
if n >= 3:
return points_num(n - 1) + n - 1
def planes_num(n):
if n < 3:
return 2 * n
if n >= 3:
return planes_num(n - 1) + n
def point_num(n):
if n < 3:
return n - 1
k, a = 3, 1
while k <= n:
b = a + k - 1
k += 1
a = b
return a
def plane_num(n):
if n < 3:
return 2 * n
k, a = 3, 4
while k <= n:
b = a + k
k += 1
a = b
return a
print(points_num(999))
print(point_num(10000000))
print(planes_num(999))
print(plane_num(10000000))
D:\Python\study\venv\Scripts\python.exe D:/Python/study/直线相交问题.py
498501
49999995000000
499501
50000005000001
Process finished with exit code 0