算法思路:平面分割问题要求求得n条直线最多可以将一个平面分为几部分。假设n条直线最多可以将一个平面分为f(n)部分,则n-1条直线最多可以将一个平面分为f(n-1)部分,当用n条直线划分平面时,前n-1条直线将平面划分为f(n-1)部分,要使n条直线划分部分最多,则第n条直线要与前n-1条直线相交且交点不能重合,则第n条直线会被前n-1条直线分成2条射线和n-2条线段,每条射线或线段将一个部分分为两部分,则会多出2+(n-2)个部分,加上前面n-1条直线将平面划分为f(n-1)部分,则n条直线最多可以将一个平面分成f(n-1)+n个部分,即f(n)=f(n-1)+n,加上f(1)=2(一条直线最多可以将一个平面分成两部分)这个条件,则可通过递归推算出f(n)。
#include<iostream>
using namespace std;
int partition(int n){
if(n==1)
return 2; //一条直线最多可以将一个平面分为2部分
else
return partition(n-1)+n; //递推条件
}
int main(){
int n;
cout<<"请输入直线条数"<<endl;
cin>>n;
cout<<n<<"条直线最多可以将一个平面分成"<<partition(n)<<"部分";
return 0;
}