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

假设函数必须返回一个字符串,这里有一个提示:

基本情况是当序列中只有一个数字时,您返回一个具有该数字的序列。在其他情况下,您使用第一个参数减去一个递归调用函数,然后将第一个参数放在结果的开头和结尾。

于 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 回答
0

此示例还处理第一个参数是否大于第二个参数

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 回答