2016-04-11 11 views
-1

私は整数で単純な除算をしようとしています。一連の減算を使用し、再帰を使用しようとします。加算と減算しか使えないコンピュータを使っていると想像してください。私は乗算と指数関数を作成しましたが、除算にもっとも時間があります。どんな助けや助言も遠くに行きます!分割のルーチン

#include<stdio.h> 

int DIV(int m, int n){ 
    if(m == 0){ 
     return 0; 
    } 
    else if(n == 0){ 
     return -1; 
    } 
    else if(n == 1){ 
     return m; 
    } 
    else if(m > 0 && n > 0) 
     return DIV(m, n-1) - m; 
} //exit 

これまでのところ私のコードですが、エンディングステートメントのヘルプが必要です。また、int mが分子であり、nが分母です。私は途中でGNU Cを使用しています。

+0

問題は...?クラッシュ?間違った結果? ...?後者の場合、いくつかの価値の例を示します。 「GNU C」は言語ではありません。 – deviantfan

+0

技術的には、0/0はまだ未定義ですが、これは問題の一部ではありませんが、最初のifの前に2番目のifを置くと、分母が0の場合の答えは常に未定義です。 – Stephen

+0

割り切れない?小数部分を持つように。また、nからmを減算し、加算と減算以外の使用が許可されていない場合は、ゼロに達するまで何回減算したかを数えることが唯一の方法です。 –

答えて

1

あなたが欲しい:

else if (m < n) 
    return 0; 
else 
    return 1 + DIV (m-n, n); 

しかし、あなたは、このコードは実際には限られた資源を持つマシン上で実行したい場合は、whileループとしてそれを実装する必要があります。おそらく(エラーチェックと負の数値処理が省略されています):

int div (int num, int den) 
{ 
    int ret = 0; 
    while (num > den) 
    { 
     num -= den; 
     ret++; 
    } 
    return ret; 
}