显示正整数个位数的所有唯一数字组合,其和等于使用C中递归的另一个正整数

显示正整数个位数的所有唯一数字组合,其和等于使用C中递归的另一个正整数,c,recursion,C,Recursion,我需要用C语言编写一个程序,从用户那里读取两个正整数, 数字N和S。程序应显示所有唯一编号 使用递归的N个位数的组合,其和等于S。 如。 对于N=3和S=10程序应显示: 8+1+1=10 7+2+1=10 6+3+1=10 5+4+1=10 6+2+2=10 5+3+2=10 4+4+2=10 4+3+3=10 如果某个数字超出范围,它将显示 “输入错误” 这是我到目前为止写的代码: void check(int n,int s) { int arr[n]; for (int

我需要用C语言编写一个程序,从用户那里读取两个正整数, 数字
N
S
。程序应显示所有唯一编号 使用递归的
N
个位数的组合,其和等于
S
。 如。 对于
N=3
S=10
程序应显示:

8+1+1=10
7+2+1=10
6+3+1=10
5+4+1=10
6+2+2=10
5+3+2=10
4+4+2=10
4+3+3=10
如果某个数字超出范围,它将显示 “
输入错误

这是我到目前为止写的代码:

void check(int n,int s)
{
    int arr[n];
    for (int i=1;i<=n;i++)
    {
        arr[i]=1;
    }
    if (n==s)
    {
        int j=1;
        while (j<n)
        {
            printf("%d+",arr[j]);
            j++;
            if (j==n)
            {
                printf("%d=%d",arr[j],s);
                break;
            }
        }
    }
    else if (n<s)
    {
        printf("Wrong input");
        exit(0);
    }
    else
    {

    }
}

int main()
{
    int N,S;
    scanf("%d %d",&N,&S);
    if (N<=0 || S<=0)
    {
        printf("Wrong input");
        exit(0);
    }
    check(N,S);

}
无效检查(int n,int s)
{
int-arr[n];

for(int i=1;iView
int arr[n];for(int i=1;ii故意跳过了
arr[0]
。如果这会给我的解决带来问题,我可以更改它。与最近的任务相同。您不仅跳过了
arr[0]
而且还为越界
arr[n]编制了索引
使用该
循环范围。@WeatherVane在我看来,我们有同样的问题要解决。查看
int-arr[n];for(int i=1;ii故意跳过
arr[0]
。如果它会在我的解决过程中进一步产生问题,我可以更改它。与最近的任务相同。你不仅跳过了
arr[0]
但将超出范围的
arr[n]
索引为
循环范围。@WeatherVane在我看来,我们有同样的问题要解决。