C++ 程序是从递归中任意产生的

C++ 程序是从递归中任意产生的,c++,recursion,C++,Recursion,请看,我正在尝试以不同的方式打印数字n,其中最大数字为4。 我的程序在循环中减去此处的编号(4),然后在末尾打印4,并将剩余的编号此处的编号(2)发送到相同的函数,最大值为3,2,1。 当max为1时,它只打印所有的1 当我输入n=6时,它显示输出 2 1 1 4 它应该显示在哪里 2.4 1 1 4 我不知道为什么会出现这种行为,这是一个简单的递归,我也检查了很多错误 这是密码 #include<bits/stdc++.h> using namespace std; void co

请看,我正在尝试以不同的方式打印数字n,其中最大数字为4。
我的程序在循环中减去此处的编号(4),然后在末尾打印4,并将剩余的编号
此处的编号(2)
发送到相同的函数,最大值为3,2,1。 当max为1时,它只打印所有的1

当我输入n=6时,它显示输出

2
1 1 4

它应该显示在哪里

2.4
1 1 4

我不知道为什么会出现这种行为,这是一个简单的递归,我也检查了很多错误

这是密码

#include<bits/stdc++.h>
using namespace std;
void comp(int n,int k)
{
if(n>=k&&k!=0&&k!=1&&n!=0)
{

    for(int i=1;i<=(n/k);i++)
    {
        for(int l=k-1;l>=1;l--)
        {
            comp(n-(i*k),l);

        }

        for(int j=0;j<i;j++)
        {
            cout<<k<<" ";
        }
        cout<<"\n";
    }
}
if(k==1)
{
    for(int i=0;i<n;i++)
    {
        cout<<"1 ";
    }

}

}
int main()
{
int n;
while(cin>>n)
{
    comp(n,4);
}

return 0;
}
#包括
使用名称空间std;
无效薪酬(整数n,整数k)
{
如果(n>=k&&k!=0&&k!=1&&n!=0)
{
对于(int i=1;i=1;l--)
{
comp(n-(i*k),l);
}

对于(int j=0;js使用print语句来查找问题所在的代码。如果您无法从中找出问题所在,请发布一个更具体的问题。递归函数和嵌套循环让人头疼,您可以在调试器中逐行检查代码,以查看发生了什么以及变量具有什么值。请注意,这将有助于p为了更好地命名变量和提供一些注释,如果您在一年内再次使用,您会理解代码吗?更长的变量名不会影响可执行程序的性能或空间消耗。@RohanAggarwal:对于n=5和k=3,它是否正常工作?关于(6,3)或(5,4)呢。如果是,则尝试找出这些输入中的变化。如果不是,则使用较小的输入,直到递归足够浅,您可以轻松地通过它。也请遵循上面Joachim的建议。我发现我的错误很多:)