重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

javaで再帰呼び出しを用いるnPk,nCk計算プログラム作成したいです。
同じクラスでnPk,nCkを求める事です。
再帰呼び出しで nからkを求める事ができないです。ひとつだけなら
できますがふたつを一緒に求める事ができません。
なんか方法がないでしょうか?お願いいたします。
結果は 引数nとk値で、 nPk、nCkの計算結果を出したいです。

A 回答 (5件)

一例として


public class ReternValue
{
public long npk;
public long nck;
}
を作成
private static long com(int n,int k)

private static ReternValue com(int n,int k)

に変更して、中身を書き直す。
これで、分からなければ、JAVAを基本から学び直す必要あり。

サンプルソースに不明な点がいくつか
(n >= r && r >=0) {
rとは?kの間違い

//nPk計算
return (n*com(n-1,k-1););//再帰呼び出し
kはどこで評価しているの?
kがマイナスになってもコールし続けてもいいの?
これだとnの階乗しか求まらないと思うけど。

この回答への補足

細かく教えていただき、本当に有難う御座います。
すごく勉強になりました。
後入力ミスが多すぎでしだね。気をつけます。
おかけ様で問題解けると思います。
これからもなんかあったらお願いします。

補足日時:2009/06/21 13:26
    • good
    • 0

>下のソースで 再帰呼び出しを使ってnpkは求めっています。



これは、補足には「//nPk計算」としか書いていないが、本来は nPk を計算するロジックが書かれている。ということですか?

>そのメソッドの元にnCkも求めたいです。
やっぱり日本語がわかりません。
nPk の結果を「利用して」nCk を求めたい、ということですか?
nPk の計算ロジックと「同様にして」nCk を求めたい、ということですか?

この回答への補足

nPk の結果を「利用して」nCk を求めたい事です。

補足日時:2009/06/21 13:36
    • good
    • 0

>結果は 引数nとk値で、 nPk、nCkの計算結果を出したいです。


ここだけで、質問者の意図を推し量り、「返値は一つしか返せないのでなんとかならない。」と解釈してみる。

・二つの整数値をメンバーに持つクラスを作成し返値とする。
or
・参照引数として返す。

以上
    • good
    • 0
この回答へのお礼

説明不足で理解しにくい問題を解釈して答えていただき、有難うございます。
初心者なので
「・二つの整数値をメンバーに持つクラスを作成し返値とする。」
がうまく理解できません。サンプル例とかあたっらお願いしてよろしいでしょか

お礼日時:2009/06/21 12:21

>再帰呼び出しで nからkを求める事ができないです。



言ってる意味がまったくわかりません。
引数は n と k なんだから、「n から k が求まる」わけもないと思うのですが。

とりあえず、途中でいいのでコードを補足に書いて、
そのコードのどこで「n から k を求めたい」のかをコメントして下さい。

この回答への補足

すみません。説明がおかしいでした。
下のソースで 再帰呼び出しを使ってnpkは求めっています。
そのメソッドの元にnCkも求めたいです。

mainメソッド{
...........
int n = Integer.parseInt(numn);
int k = Integer.parseInt(numr);

if (n >= r && r >=0) {
//npk計算結果出力
System.out.println(com(n,k));
}else{
System.out.println("inputerror");
}

}
private static long com(int n,int k){
if( n ==0){
return 1;
}else {
//nPk計算
return (n*com(n-1,k-1););//再帰呼び出し
}
}

補足日時:2009/06/21 11:31
    • good
    • 0

1つが出来るなら、それを2つ作って、2つを呼び出す関数を


作る、ではダメなのですか?

機能実現が目的ではなくて、パズルか何かの問題でしょうか?
    • good
    • 0
この回答へのお礼

そうなんですよ、課題です。
参考させて頂きます。

お礼日時:2009/06/21 11:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!