-4

重複の可能性:
再帰的な印刷プログラムの書き方

すでにこの質問をしましたが、情報不足のため閉鎖しました。 再帰的な印刷プログラムの書き方

達人、

印刷する再帰関数の書き方を知りたい

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

例:display(4)は次のように出力します

1
12123 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);
}

出力 112123
_ _




問題

純粋な再帰関数を書きたかったのですが、不要なプリントをフィルタリングできませんでした。誰かが私を助けてくれることを願っています!!!

4

2 に答える 2

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
于 2012-10-16T07:16:20.210 に答える
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;
    }
于 2012-10-16T07:09:01.100 に答える