切披萨饼

问题:n刀最多把pizza切成几块?

分析:其实还是递推思想,比如两刀可以切成4块,那么下一刀,也就是第三刀,肯定是要和前两刀的每一刀线都要相交,这样才能保证切成足够多的块数,这样一来,就会多出 4 个交点(包括与圆的边界的焦点),也就会多出 3 个小块,原因时是每相邻的两个点就会确定一个多出的小块。容易推出,第 n 刀切下去最多会多出 n 块。递推关系是:

\(f(1) = 2; f(n) = f(n - 1) + n\)

C语言代码测试:

# include<stdio.h>

int CutPizza(int n)
{
    if(1 == n)
        return 2;
    else
    {
        return CutPizza(n - 1) + n;
    }

}

int CutPizza02(int n)
{
    return ((1 + n) * n) / 2 + 1;
}

int main(int argc, char *argv[]) {
    
    int res = CutPizza(8);
    int res2 = CutPizza02(8);
    printf("一共可以切 %d 块\n", res);
    printf("第二种方法的结果:%d 块", res2);
    
    return 0;
}

注意,根据递推关系,我们很容易就可以得出通项公式,所有上面的 CutPizza02 就是通项公式,在这里是比递归要好上很多的。

运行结果:

posted @ 2020-09-10 12:48  模糊计算士  阅读(819)  评论(0编辑  收藏  举报