1

これが問題です:

f()シーケンスを表示する再帰関数を開発します。

1 2 3 4 5...i (i-1) (i-2)...2 1 

f(1,i)が呼び出されたときのテキスト フィールド。

ループ、グローバル変数、配列は使用できません。また、任意の開始点と終了点で機能するようにする必要があります。元:

f(2,5)=2 3 4 5 4 3 2.

私は完全に困惑しています。せめてヒントをください。

4

4 に答える 4

2

大きなヒント:

f(2,5) = 2 + f(3,5) + 2;
f(3,5) = 3 + f(4,5) + 3;
f(4,5) = 4 + f(5,5) + 5;
f(5,5) = 5;

それで

         { a + f(a+1,b) + a     if a<b 
f(a,b) = {
         { a                    if a==b

さっそくコーディングしてみる。

于 2013-10-05T02:52:14.197 に答える
0

この例では、最初の引数が 2 番目の引数より大きい場合も処理します

printUpAndDown(1, 5)=1 2 3 4 5 4 3 2 1

printUpAndDown(5, 1)=5 4 3 2 1 2 3 4 5

printUpAndDown(5, 5)=5

public static void printUpAndDown(int i, int j)
{
    System.out.print(i + " ");
    if (i == j) return;
    int intToPass = (i > j) ? i - 1 : i + 1;   
    printUpAndDown(intToPass, j);
    System.out.print(i + " ");
}
于 2013-10-05T22:32:57.527 に答える
0

関数が文字列を返す必要があると仮定すると、ヒントは次のとおりです。

基本的なケースは、シーケンスに数字が 1 つしかない場合で、その数字のシーケンスを返します。それ以外の場合は、最初の引数を 1 つ減らして関数を再帰的に呼び出し、最初の引数を結果の最初と最後に置きます。

于 2013-10-05T02:41:33.773 に答える
0

2 つの再帰関数を使用します。以下のコードはテストされていません - ヒントとして役立つことを意図しています

 void printSequenceForGivenNumber(int i)
 {
printNextBiggerNumber(i, maximum);
printNextSmallerNumber(maximum - 1)
 }

void printNextBiggerNumber(int input, int maximum)
{
    if(input <= maximum)
    {
     System.out.print(input + " ");
     printNextBiggerNumber(input + 1, maximum);  
    }
}   


void printNextSmallerNumber(int input)
{
 if (current > = 1)
 {
    System.out.print(input + " ");
    printNextSmallerNumber(input - 1);
 }

}
于 2013-10-05T02:43:00.650 に答える