2016-12-01 4 views
-4

ループが使用されていない再帰、加算および減算を使用して数値が偶数か奇数かをチェックする方法が必要です。番号が+、 - 、および再帰のみを使用しているかどうかを調べる

私はそこまで得ることができます(私はまだ%を使用しています):
boolean odd = (k % 2 == 1);

誰のアイデアを持っていますか?あなたがC言語でそれを行うことができ、真の0を返す(さえ)、(奇数)偽1つの戻り

+0

に設定されています。他にどのような人為的な制限がありますか?また、特定の言語に興味がある場合や、「アルゴリズム」としてタグ付けする場合を除き、これらの言語タグを削除することもできます。 –

+0

結果を奇数とし、前の値を偶数とする。再帰的に呼び出します。 –

+2

あなたのタグでもっと賢明にしてください。あなたが3つの言語をタグ付けしているという事実は、あなたの質問が過度に広いという警告サインです。そしてこの質問はoopと全く関係がないようです。 – yshavit

答えて

0

は繰り返し2(再帰)

ベースの例を引きますたとえば、次のようになります。

bool isOdd(int num) 
{ 
    if (num==2) return false; 
    else if(num==1) return true; 
    else return isOdd(num-2); 
} 

このプログラムは、0より大きい数値に対してのみ機能します。 Rすべての数字があなたのために運動して残っている:)

+2

数字が負の場合はどうなりますか? – Servy

+0

絶対値をとり、元のアルゴリズムを使用します。 – Prune

+0

そして、加減算だけを使って絶対値を取ることをどのように提案しますか? – Servy

1
bool IsEven(int num) 
{ 
    if (num == 1) return false; 
    if (num == 0) return true; 
    return IsEven(num - 2); 
} 
0

感謝:)

+0

最初に 'num == 2 'をチェックする必要があります。 –

+0

真実、ちょうど奇妙な言葉を台無しにしました:) –

0

次のソリューション試すことができます:ちょうど最下位ビットをチェック

int isEven(int n) { 
    if (n == 0) return 1; // zero is even, return true 
    return isOdd(n - 1); 
} 

int isOdd(int n) { 
    if (n == 1) return 1; // one is odd, return true 
    else return isEven(n - 1); 
} 
+0

私のために 'java.lang.StackOverflowError'を投げます。制御フローが混乱しています。 'isEven(int)'が 'n - 2'で呼び出され、' return!isEven(n); ' – Michael

1

をあなたが投稿したコードが十分に単純に見える

IsOdd = (k & 1) != 0; 
+2

として' isOdd'が実装されている方が良いと思います。 OPは '+'と ' - 'のみを使うと言っていました。 – Mat

+1

これは再帰ではなく、&は '+'と '-'だけであるため許されません。 –

+0

何かそんなに些細なことがあっても、なぜあなたは再帰を使用しますか?ループで十分であり、はるかに効率的です。しかし、ループさえ不要です。 – PaulF

関連する問題