2010-12-03 6 views
1

これまでに得られたすべての定義が定義されています。力と階乗関数を再帰的に実装しようとしています。 C++

double power(double base, int exponent); 

double factorial(double n); 

これ以降、私は完全に迷ってアイデアを探しています。これらを読み取ることで

+2

これまでは、SOまたはGoogleの歴史の中でこれまでに質問されていません。 : - 〜 –

+1

しかし私の提案は、再帰に関する講義ノートをもう一度読むことです。 –

+0

私はしましたが、力と階乗の機能で何が期待されているのか正確には分かりませんでした。私は再帰を理解していますが、私は休みの日があります。スキルディックはそれをクリアしました...今私はちょうど愚かな笑を感じる... – Zud

答えて

8

まあ、^ 4 3は3 * 3^3で3 * 3 * 3 * 3です。 3^3は3 * 3^2です。 3^2は3 * 3^1です。 3^1は3です。

5! 5 * 4 * 3 * 2 * 1です。これは5 * 4!です。 4! 4 * 3!です。 3! 3 * 2!です。 2! 2 * 1!です。 1!あなたが実際に製品コードのためにこれらの関数を書いていた場合で乗ることに十分なあなたを与える必要があります。1.

...

0
int factorial(int n){ 
if(n==0) return 1; 
else return n*factorial(n-1);} 


int power(int number, int p){ 
     if(p==1) return number; 
     else return number*power(number, p-1); 
} 
0
double power(double base, int exponent) 
{ 
    if (exponent == 0) 
      return 1; 
    else 
      return base * power(base, exponent - 1); 
} 

double factorial(double n) 
{ 
    if (n == 0) 
      return 1; 
    else 
      return n * factorial(n - 1); 
} 
+0

または 'if(指数== 1)リターンベース;'? – Skilldrick

+0

はい:追加の乗算を避けます。私はそれを逃した。 – JohnGray

+0

@Skilldrickそれはx^0のために働きません。 0^0は正しく処理されますが、未定義です。 –

0

は再帰、(最初の再帰を使用せずにこれを解決してみていますとにかく彼らのパフォーマンスを傷つけるだろう)。それを取得した後、それを再帰アルゴリズムに変換するのは簡単なことです。

ヒント:

N! = N *(N-1)!他

1からNのPにN^P =製品

0

誰もがexpが正であると仮定しているようです。おそらく、アプリケーションにとって重要な場合は、1よりもむしろ0^0を適切にNaNとして扱うように変更することができます。

double int_power(double base, int exp) { 
    if (exp == 0) 
     return 1; 
    if (exp > 0) 
     return base*int_power(base, exp-1); 
    else 
     return int_power(base, exp+1)/base; 
} 
関連する問題