零基础学习算法第十五课 数论之平面分割问题

本文介绍了一种计算n条直线最多能将平面分割成多少部分的递归算法,通过分析交点和新增部分,得出f(n)=f(n-1)+n的关系,从而实现对问题的求解。
摘要由CSDN通过智能技术生成

算法思路:平面分割问题要求求得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;
}

3b69df9b094f47c9ad0407c547618a06.png

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值