-4

グル、

出力する再帰関数の書き方を知りたい

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

1

123

問題

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

アップデート

答えてくれてありがとう。与えられたすべてのコメントから、再帰だけで書くことができ、ループが必要なようです。

4

8 に答える 8

4

再帰関数を定義するには、次の 3 つのことを行う必要があります。

  1. 関数が何をするかを定義します。この場合、 1 からnまでの数字を出力しています。
  2. 再帰呼び出しとは何かを定義します。次回はどうなりますか?最も簡単な方法は、ボトムアップで考えることです。この場合、前の行ごとに、前の行よりも 1 少ない数値が表示されます。したがって、関数を再度呼び出すたびに、前の数より 1 少ない数で呼び出す必要があります。
  3. 停止条件を定義します。いつ再帰を停止する必要がありますか? この場合、数値 1 をヒットすると、これが最後の反復になります。つまり、この停止条件に達するまで、つまりn が 1 より大きい、再帰関数を呼び出したいということです。

したがって、次のアルゴリズムになります。

function display(n):
    if(n > 1):
        display(n-1);

    print 1..n;
于 2012-10-15T07:00:00.840 に答える
1

編集:OK、@lcのガイドラインで答えを改善しました。

void print_recursive(unsigned int num) {
    if (num > 1) {
        print_recursive(num - 1);
    }
    for (unsigned int i = 0; i < num; i++) {
        printf("%d ", (i + 1));
    }
    printf("\n");
}
于 2012-10-15T06:59:34.740 に答える
0

x < 1 になるまで、引数 1 を指定して PrintIt() を再帰的に呼び出し続けます。x < 1 になると、各呼び出しは逆の順序で戻ります。戻りのたびに、1 から x までの行を出力します。

#include "stdio.h"

void PrintIt( int x )
{
    int i;
    if( x > 1 )
    {
        PrintIt( x - 1 );
        printf("\n");
    }

    for( i = 1; i < x+1; i++)
    {
        printf("%d", i);
    }

    return;
}

int main(int argc, char *argv[])
{
    PrintIt( 4 );
    return 0;
}
于 2012-10-15T07:22:42.543 に答える
0

ここで使用される再帰関数は func(int) です。最初に、値は main() プログラムから渡されます。再帰は、この場合は val=0 である終了条件に到達するまで発生します。そのレベルに到達したら、最後から 2 番目のフレームをプリント「1」に移動します。同じパターンに従って、シーケンス「1 2」が得られます。. . 「1 2 3」 . . . 「1 2 3 4」

int func(int val){

        int temp,i;

        if( val == 0 )
        {
                val++;
                return val;
        }
        else
        {
                val--;
                temp=func( val );

                for (i=1;i<=temp;i++)
                {
                        printf("%d",i);
                }
                printf("\n");

                temp++;
                return temp;
        }
}

int main(){

        int value=4, result;

        result=func(value);
}
于 2012-10-15T07:27:39.380 に答える
0
#include<stdio.h>
void print_num(int x);
int n;
void main(){
printf("Enter number of lines: ");
scanf("%d",&n);
print_num(1);
}
void print_num(int x){
int i;
for(i=1;i<=x;i++){
printf("%d",i);
 }
if(x<n){
printf("\n");
x++;
print_num(x);
 }
}

これは簡単ですよね?

于 2014-03-21T10:26:16.010 に答える