私はまだ基本的な再帰に問題があります。再帰関数への変換?
unsigned long factorial(int x)
{
// recursive function to find factorial
if(x==1)
return 1; // base case
return x * (factorial(x-1)); // recursive call
}
int choose(int choose, int choose_from)
{
// function to find how many different ways to "choose"
// calls factorial function multiple times
return factorial(choose_from)/(factorial(choose) * factorial(choose_from - choose));
}
私のインストラクターが、これは実際には間違っていると私は選択した機能に再帰しなければならない私に言ったように、私は2つの機能が示されています。私は選択式がのように与えられて以来、どのようにC(n、r)= n! /(r!・(n-r)!)、そして再帰されているのはすべて階乗であるから、私はちょうど別の階乗関数を作った。
新しいライブラリを使用せずにこれらの2つの関数が1つの再帰関数になる方法はありますか?
2項間の関係には無限大があります。適切に再帰的に見えるものを選んでください。これを使って。 –
さて、C(n、r)を計算するために今やっているように、すべての階乗を計算する必要はありません。数式を紙に書いて値をキャンセルしてください。あなたは数回の乗算だけ残すべきです。たとえば 'C(52、51)' - あなたは確かに計算する必要はありません52! 51!答えを得る。 – PaulMcKenzie
私はこれに近づけるための良い方法**は、パスカルの三角形を、その行の前の数字から計算することによって提示することです。数字ごとの固定数の算術演算を使用します。計算では、行の番号の配置などの情報を使用できます。私は高校でこれをやっていることを覚えています(i8085コンピューターで)、それは非常に実践的で有益です。これにより、再帰式として簡単に表現できる関係が得られます。そして 'choose'関数で使用されます。 –