如何写一个递归打印的程序

时间:2012-10-16 06:33:44

标签: c recursion

  

可能重复:
  How write a recursive print program

我已经问过这个问题,但由于信息不足而被关闭了。 How write a recursive print program

大师,

我想知道如何编写打印

的递归函数

1
12个
123个
1234
...
......

例如:display(4)应打印

1
12个
123个
1234

代码

#include <stdio.h>

void print(int n)
{
        if(n != 0)
        {
                print(n-1);
                printf("\n");
                print(n-1);
                printf("%d",n);
        }
}
int main()
{
        print(3);
}

输出
1

12个

123个

问题

我想写一个纯粹的递归函数,但无法过滤不需要的打印件。 希望有人能帮帮我!!!

2 个答案:

答案 0 :(得分:1)

这可能是你想要的吗?

#include <stdio.h>

void print(int n)
{
    int i;
    if (n > 0)                  // [2]
    {
        //call print recursively
        print(n-1);             // [3]
        for (i=1; i<=n; i++)    // [4]
            printf("%d",i);
        printf("\n");
    }
}
int main(int argc, char *argv[])
{
    // If no argument, default to 8
    int value=8;
    if (argc > 1 )
        value = atoi(argv[1]);
    print(value);                // [1]
    return 0;
}

编译并执行如下:

display 3

或没有任何参数(默认为display 8):

display

诀窍是在打印当前print(n-1)的输出之前调用n。这是以display 3执行时的程序流程:

<main() function is running>
main() calls print(3) in [1]
   <print(3) is running, n is 3>
   since n>0 in [2] print(3) calls print(2) in [3]
      <print(2) is running, n is 2>
      since n>0 print(2) calls print(1)
         <print(1) is running, n is 1>
         since n>0 print(1) calls print(0)  
            <print(0) is running, n is 0>
            since n=0 print(0) doesn't print anything and returns
            now the function that called print(0) (that is, print(1)) takes over
         <print(1) is running, n is 1, continues executing in [4]>
         print (1) enters the for loop, prints "1\n" and returns
         now the function that called print(1) (that is, print(2)) takes over
      <print(2) is running, n is 2, continues executing in [4]>
      print(2) enters the for loop, prints "12\n" and returns
      now the function that called print(2) (that is, print(3)) takes over
   <print(3) is running, n is 3, continues executing in [4]>
   print (3) enters the for loop, prints "123\n" and returns
   now the function that called print(3) (that is, main()) takes over
<main() is running>
main executes return(0) and exits

这是打印到控制台的内容:

1
12
123

如果您在print(n-1)之后移动printf("\n"),您将拥有:

123
12
1

答案 1 :(得分:0)

您可以使用以下代码。

#include<stdio.h>

    void rec_print(int n)
    {
     int i=1;
     if(n>0)
     {
      rec_print(n-1);
      for(i=1;i<=n;i++)
            printf("%d",i);
      printf("\n");
     }
    }

    int main()
    {
     int n=5;
     rec_print(n);
     return 0;
    }