2017-04-01 6 views
-4

ここには単純階乗計算機があります。私はそれをテストするために3つの異なる引数を持つ関数factorialを呼び出しました。何らかの理由で、関数が期待される値を返すされていません。カスタム階乗関数が期待通りに機能しない

#include <iostream> 
using namespace std; 

int factorial(int a) { 
    int result = 1; 
    for (int i = 0; i < a; i++) { 
    result *= result + 1; 
    } 
    return result; 
} 

int main() { 
    cout << factorial(4) << endl; // returns 1806, expected 24 
    cout << factorial(5) << endl; // returns 3263442, expected 120 
    cout << factorial(6) << endl; // returns -1461943274, expected 720 
    return 0; 
} 
+2

階乗の定義は何ですか?どうやら、あなたはあまりそれに精通していません。 – ForceBru

+0

あなたのプログラムがあなたの入力の一部に対して何をしているのかを紙に書き込もうとするかもしれません。 (必ずしも紙ではなく、あなたのプログラムのようにあなた自身が一歩一歩進んでいくことがポイントです) – TGar

+0

そしてあなたのデバッガを使用してください。ここに投稿するよりも速いです。 –

答えて

1

問題は、あなたが1理由を追加している、あなたの階乗関数でありますか?あなたは、あなたがこの

int factorial(int a) { 
    int result = 1; 
    for (int i = 1; i <=a; i++) { 
     result = result * i; 
    } 
    return result; 
} 

それとも、

再帰関数を使用することができるようにコードを変更することができ i=1から i<=aにあなたのループを開始し、 iを掛ける代わりに数学の定義により +1

Factorial of n = n*(n-1)*(n-2)...3.2.1

必要があります

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

私は、forループの代わりに、あなたの関数にwhileループを使用します。

int factorial(int a) 
{ 
    int result = 1; 
    while (a > 0) 
    { 
     result *= a; 
     a--; 
    } 
    return result; 
} 

編集:あなたのコードで 一つの問題あなたのためのループに私が減少していないということです。それはこのようにする必要があります:

int factorial(int a) { 
    int result = 1; 
    for (int i = a; i > 0; i--) 
    } 
    result *= i; 
    return result; 
} 
関連する問題