これが問題です:
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.
私は完全に困惑しています。せめてヒントをください。
大きなヒント:
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
さっそくコーディングしてみる。
この例では、最初の引数が 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 + " ");
}
関数が文字列を返す必要があると仮定すると、ヒントは次のとおりです。
基本的なケースは、シーケンスに数字が 1 つしかない場合で、その数字のシーケンスを返します。それ以外の場合は、最初の引数を 1 つ減らして関数を再帰的に呼び出し、最初の引数を結果の最初と最後に置きます。
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);
}
}