这是问题所在:
开发递归函数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.
我完全难过了。请至少给我一个提示。
答案 0 :(得分: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
现在尝试编写代码。
答案 1 :(得分:0)
假设函数必须返回一个字符串,这里有一个提示:
基本情况是序列中只有一个数字,在其中返回带有该数字的序列。在其他情况下,使用第一个参数递减调用函数,然后将第一个参数放在结果的开头和结尾。
答案 2 :(得分: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);
}
}
答案 3 :(得分: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 + " ");
}