2017-08-07 10 views
1

forループnnの値は、ループを終了した後に0になります。私はそれがループで説明されているように増加することを期待しました。終了後にnnを保存するにはどうすればよいですか?forループ内の値はインクリメントしません

void branch(int *numbers, int left) { 
    Int nb, nn; 
    nb = 0; 
    nn = 0; 

    if (left != 0) 
     for (int branchn = 1; branchn <= left; branchn++) { 
      for (int index = 1; index <= branchn; index++) { 
       *(buffer + nb) = *(buffer + nb) * 10 + *(numbers + nn++); 
       printf("%d\n", nn); 
      } 

      nb++; 
      length++; 

      branch(numbers, left - 1); 
     } 
    else { 
     branchop(length--); 
     nb--; 
    } 
} 
+1

「静的」にすることができます。あるいは、関数にパラメータとして渡す方が良いでしょう。あるいは、より効果的なコードを取り除いて、テールを最適化してもしなくてもよく、単純なforループで置き換えることができます。 – Lundin

答えて

1

実際には、設計通りに動作します。

あなたは再帰的メソッドの起動時に0nnを設定しますbranch()branch()を呼んでいます。最後に再帰的なままにするときbranch()nnは、for()ループ内に割り当てられた増分値を持ちます。

3

あなたのコードは複数の問題があり、そのデザインは非常に紛らわしいです:

  • Int何ですか?
  • bufferlengthbranchop()の定義は何ですか?
  • なぜ1ベースのオフセットを使用しますか?配列インデックスはCベースで0です。
  • なぜ再帰を使用しますか?
  • nnおよびnbは、自動ストレージを持つローカル変数です。branch()です。それぞれの新しい再帰呼び出しには、これらの変数の独自のセットがあります。これらをstaticにすると、再帰的な呼び出しを含め、すべての呼び出しで共有されるようにすることができますが、コードはさらに複雑になります。

コードの修正版を提供することはできません。なぜなら、達成すべき内容についての手がかりがなく、投稿された断片から伝えるのが難しいからです。

関連する問題