2017-02-20 12 views
1

私はC++を新しく使いました。電卓を作ろうとしています。しかし、私はシンプルなC++ XCODEプログラムのEXC_BAD_ACCESS

int factorial(int num1) 

何が起こっているすべてのアイデアにエラーEXC_BAD_ACCESSを取得し、

 int factorial(int num1) { 
    int sum; 
    if (num1 == 1) { 
     sum = 1; 
    } 
    else { 
     sum = factorial((num1 - 1) * num1); 
    } 

    return sum; 
} 

私がしようとすると、これをコンパイルするたびに:私は、数の階乗を取得する目的のために、この機能を設計しましたか?私はXCODEを使用しています。

+0

私はコンパイラがクラッシュするのではないかと疑いますが、実行しようとするとクラッシュするプログラムだと思います。しかし、私たちが[最小限で完全で証明可能な例](http://stackoverflow.com/help/mcve)を持っていなければ、あまり言い表せません。あなたの質問を編集してください。最も重要なのは、関数の呼び出し方法(宣言していない)です。そして、あなたが入力を読んだ場合は、あなたが与えた実際の入力も含めてください。または、デバッガでプログラムを実行して自分で解決しようとします。 –

+2

ただし、あなたは*無限再帰*を持つ関数に '2'を渡します。デバッガを使用して理由を調べることができます。 –

答えて

1

num11ではない場合は、定義が無限再帰になります。

数学を自分で行います階乗関数の再帰的な定義は

factorial(n) = factorial((n - 1) * n) 

ない

factorial(2) 
= factorial((2-1) * 2) 
= factorial(2) 
= factorial((2-1) * 2) 
= ... 

または

factorial(3) 
= factorial((3-1) * 3) 
= factorial(6) 
= factorial((6-1) * 6) 
= factorial(30) 
= ... 

をそれが

factorial(n) = n * factorial(n - 1) 
です

(そして階乗は和ではなく製品です)

関連する問題