-2

Xcode を使用して C で再帰ループを実行しようとしました。コードは、宿題として試してみたい 7boom ゲーム用です。再帰を使用しようとしましたが、私の Xcode はスタックであり、エラーが表示されます。

これが私のコードです:

#import <Foundation/Foundation.h>
    int main(int argc, const char * argv[])
     {
       BOOL reverse( int num);
       @autoreleasepool {
            int i;
            int num1;
            int num2;
            NSLog(@"Hello, World!");
           for ( i = 1; i<=20; i++){
               num1 = i / 10;
               num2 = i;
               if(i == 7){
                  NSLog(@"boom, i=%d", i);
                 i++;
              }
             if(i % 7 ==0){
                 NSLog(@"boom i=%d", i);
                 i++;
             }
            if(!reverse(i)){
               NSLog(@"boom reverse");
               i++;
             }
        NSLog(@"%d", i);
      }  
    }
   return 0;
  }
BOOL reverse (int num)
{
   if(num == 7)
       return (true);
   else
       reverse(num % 10); 
    return (false);
}

私は何を間違えましたか?

4

2 に答える 2

4

これは、6(またはほとんどの数値)のような数値では返されません。

BOOL reverse (int num)
{
    if(num == 7)
        return (true);
    else
        reverse(num % 10); 
    return (false);
}

6は7に等しくありません、6 mod 10=6スタックがオーバーフローするまで繰り返します。

コードの残りの部分も少し疑わしいようです。ループ内でforループの制御変数を操作することは常に避けてください。

于 2012-06-22T17:40:17.470 に答える
0

宿題なのでヒントだけ…

ifあなたはが何をするかを理解しているように見えますelse

実行する機能またはアルゴリズムは何reverseですか?

true整数の最上位 (左端) の桁が である場合にのみ返すこと7ですか?

つまり、10 未満の数値とそうでない数値の 2 つのケースがあります。これら 2 つのケースを区別するコードを記述します。

では、最初のケースで何をしなければなりませんか? それをコードに追加します。

そして、2 番目のケースでは何をしなければなりませんか (ヒント: 再帰ですか?)? それをコードに追加します。

終わり。

(2つの変数を定義し、制御変数を使用せずに変更するfor反復について他の人が提起した懸念は別として-このループはおそらくあなたが思っていることをしません!)num1num2i

于 2012-06-22T19:01:23.927 に答える