我想提出一个递归函数,它接受一个非负整数 n 作为输入,并生成从 0 到 n 然后再到 0 的所有自然数的列表
例如,如果函数名为
ArrayList<Integer> f(int x)
;当x = 4时它给出一个包含
的列表{0,1,2,3,4,3,2,1,0}
如何实现这一目标?可以在一个函数中完成此操作,而不需要诸如计数和倒计时之类的辅助函数。
需要逻辑!
感谢帮助!
最佳答案
这是我的解决方案:
public ArrayList<Integer> f(int x) {
ArrayList<Integer> arr;
if (x == 1) {
arr = new ArrayList<Integer>();
arr.add(0);
arr.add(1);
arr.add(0);
} else {
arr = f(x-1);
int pos = (int) (arr.size() / 2)+1;
arr.add(pos, x);
arr.add(pos + 1, x-1);
}
return arr;
}
在这个算法中,我将x的基值为1,生成的数字应该是[0,1,0]。
如果x大于1,则递归生成x-1的列表,然后在返回列表的适当位置插入两个值x和x-1,本质上是在中间旁边的位置值。
例如
如果 x 等于 2;
获取 1 的值 - 这将是 [0,1,0]
然后在第三个位置(中间之后的位置)插入2和1得到[0,1,2,1,0]
如果 x 等于 3;
获取 2 的值 - 这将是 [0,1,2,1,0]
然后在第四个位置插入3和2得到[0,1,2,3,2,1,0]
等等...
关于java - 如何在一个递归函数中先向上再向下计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27113184/