这就是问题:
开发一个递归函数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 个递归函数。下面的代码未经测试 - 它旨在作为提示
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);
}
}
此示例还处理第一个参数是否大于第二个参数
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 + " ");
}