c++程序切披萨问题

【问题描述】 把一张夏威夷风情披萨放在桌子上,不许离开,每一刀切下去都是一条直线,切 n 刀最多能分 成多少块?(1<=n<=30)
【输入】输入一个正整数表示所切刀数 n
【输出】输出一个正整数 m,披萨最多被切成的块数。

我的理解是这样的:当前切完之后的块数是上一次切的刀数与上一次切完之后的块数加1,可以用循环和递归做,
下面是代码

#include<stdio.h>
#include<iostream>

using namespace std;

int cutpizza(int n)
{
    if(n==0)  return 1;

    int m=2;
    int i = 1;

    while (n-1>0)
    {
        ++i;
        m = i+m;
        --n;
    }

    return m;
}

int main()
{
    int n;
    cin >> n;
    cout << cutpizza(n) << endl;
}

#include <stdio.h>

int cut(int n)
{
    if (n == 0)
    {
        return 1;
    }
    else
    {
        return cut(n - 1) + n;
    }
}

int main()
{
    int n,m;
    scanf("%d",&n);
    m = cut(n);
    printf("%d",m);
   
   return 0;
}