-2

Cで再帰関数を書くのに問題があります:

void func(int n)

これは、指定された数値に対して、nは「1」を出力し、その後にn個のゼロを出力します。

例えば:

func(3);

プリント:1000

func(5);

プリント:100000

(関数外の)グローバル変数は許可されておらず、引数の数を増やしてはなりません。他のヘルパー関数は許可されていません。

4

5 に答える 5

0

この問題は、たとえばfuncとの2つの関数を使用して解決できfunc_recます。funcを出力し、ゼロのみを(再帰的に)出力する1再帰関数を一度呼び出します。func_rec

于 2012-07-30T14:11:09.377 に答える
0

いくつかのポインタ:

  1. 関数の最初の呼び出しでのみ「1」を出力する必要があるのはなぜだと思いますか?
  2. 再帰関数の最後の呼び出しでそれを印刷してから、すべての0を印刷できないのはなぜですか?
  3. 関数の呼び出しが再帰的な方法で最後の呼び出しであるかどうかをどのように判断しますか?(「n」の値は答えを保持できますか?)
于 2012-07-30T14:01:40.813 に答える
0

静的変数を調べることをお勧めします。静的変数を設定して、関数が再帰的に呼び出されているかどうかを確認できます。グローバル変数の使用が許可されていない場合、それはトリッキーな回避策にすぎません。そして、再帰が完了したら、次の呼び出しのためにそれを元に戻します。

于 2012-07-30T14:07:18.563 に答える
-1
#include <stdio.h>

void func(int k){
  if(k==0){
    printf("1");
    return;
  }
  func(k-1);
  printf("0");
}

int main(){
  func(3);
  return 0;
}
于 2012-07-30T13:59:09.207 に答える
-1
#include <stdio.h>

void func(int n)
{
    static one = 1;
    if (one == 1){
        printf("1");
        one--;
        func(n - 1);
    }
    else {
        if (n < 0){
            printf("\n");
            return;
        }
        else {
            printf("0");
            func(n - 1);
        }
    }
}

int main() {
    func(5);
    return 0;
}

コードは非常に些細なものなので、宿題のように見えても、私はコードを配っています。

あなたの以前の質問は、あなたがcコーディングにあまり興味がないことを示唆しています。私がやろうとしているのは、コードを提供することでフラストレーションを減らすことですが、ひねりを加えています。

私が与えたコードが「純粋」関数ではない理由を教えてください。このソリューションをグローバルストレージを持つソリューションと一緒に破棄する必要がある理由。

あなたはこのことを学ぶべきです、それはかなり興味深いです:)

于 2012-07-30T14:21:18.400 に答える