使用main函数递归以打印数字

kas*_*ish -1 c recursion

我正在使用循环打印以下模式:

1 12 123 1234 12345

为什么以下代码在显示模式之前显示一些随机值?当我使用递归到一些随机函数func(int a, int b)并将值(1,1)传递main给此函数时,它工作正常.

int a=1,b=1;
int main(int a, int b)
{
    if(a>5)
       return 0;

    else if(b<a)
    {
        printf("%d",b);
        main(a,++b);
    }

    else if(b==a)
    {
        printf("%d ",b);
        main(++a,1); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

hon*_*onk 5

根据C标准1,该main()功能的以下签名有效:

int main(void)
Run Code Online (Sandbox Code Playgroud)

int main(int argc, char* argv[])
Run Code Online (Sandbox Code Playgroud)

当您将命令行的参数传递给main()函数时(总是至少有一个:程序的名称始终是第一个元素argv[],即,argv[0]),你得到奇怪的结果,因为参数被转换为你的整数值.

因此,您应该使用自己的函数进行递归任务,例如int func(int a, int b),如您所述.

1注意:我的答案有点过于简单了.有关更详细和正确的说明,请参阅此答案.