注册 登录
编程论坛 C语言论坛

最后问一下各位大佬这个递归的问题怎么改,抱歉呀

qianshang666 发布于 2020-11-27 19:07, 1044 次点击
一个国王给王子们分财产,第一个来领的可得1份加上剩下的十分之一;第二个来领的可得2份加上剩下的十分之一;依次类推。国王有几个儿子,分了多少份财产?
#include<stdio.h>
int F(int n, int m)  //假设老国王共有 n 个儿子,财产共分成了 m 份,第一个儿子时,剩 余财产份数 (m-1) * 9/10
{
        //第n++个儿子时,剩余财产份数
        m = (m-n)*9/10;   //m=(m-n)应该为10的倍数
        n++;
    m = m-n;
        if(m%10 == 0)//为 10 的整数倍时,进行下一步判断
        {
                if(m==0)return 1;  //当财产剩余数为零时,返回 1,结束 main 函数中的 i 循环
                else{m=m/10*9;F(n,m);}   //当财产剩余数不为零时,调用 F     
    }
        else return 0; //当不是 10 的整数倍时,返回 0,继续 i 循环
}
void main()
{
    int n, m, i;
        for(i = 1; i<=n; i++)      // 当 i==1 时,存在一组取值
    {
        n = 0; //对于每一个 i,需对 n 清零
            m = i; //以 i 循环来产生财产份数
            if(F(n,m)) break; //返回 1,结束循环
    }

    printf("n = %d m = %d\n\n", n, m);
}
0 回复
1