2016-06-18 15 views
-1

この関数を再帰的に定義するにはどうすればよいですか?これを再帰関数として実装するにはどうすればよいですか?

何とかkは同じに滞在しているが、私たちはAJを使用することはできませんとして、我々はあなたがnを渡す必要が再帰関数のためにいつものように次の再帰ステップ

http://i.imgur.com/BnQlE1F.png

+2

イメージではなく実際のコードを提供してみませんか? –

答えて

1

のためのkを変更する必要があります、kおよびjも同様である。特に、ある特定の関数の実行について考えると、これは非常に論理的です。インクリメンタルプロダクトの1ステップのみを計算します。

the_func(n, k, j): 
    ... 

あなたは以下の実行に次のjを渡すために、すべての特定の計算の後にJをインクリメントする必要があります。次のように結果としての機能の署名が見えます。さらに、次のようになります。終了条件を追加する必要があります。

if(k==j): 
    ... Pop back the whole recursion... 
+1

私はまた、jを渡すことなくそれを行う方法が表示されません。答えをありがとう! – user6454491

+0

はい、これは 'j 'なしでは不可能です。 –

1

あなたは再帰関数としてこれを行う必要がある場合は、のようなものを試してください:

def f(n: Double, k: Double) = { 
    def f0(k1:Double): Double = 
    if (k1 >= 1.0f) 
     (n-k+k1)/k1 * f0(k1-1) 
    else 
     1.0f 
    f0(k) 
} 

それはfoldLeftを探してチェックする価値がありますfoldRightと差異について読む。

+1

kが下限が1であることを知っているので、3番目の変数は必要ありません。 。 –

+0

hm。 OK。 (n-k + j)/ jのように、各ステップで使用されるkの初期値を保存せずに、kでどのようにカウントダウンするのですか? – user6454491

+0

@ user6454491 ..私はk1値で数えています。再帰関数はf0です。私はf0をk1 = kで呼び出すことから始めます。値nとkは定数です。 f0に対する各再帰呼び出しは、k1を減分する、すなわち、* f0(k1-1)である。終了条件は、k1 = 0の場合です。その場合、1を掛けて答えを返します。 k1の名前をjに変更した方が意味があります。 –

関連する問題