java - 如何在一个递归函数中先向上再向下计数?

标签 java function recursion logic

我想提出一个递归函数,它接受一个非负整数 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/

相关文章:

c++ - C++中函数重载的混淆

recursion - Clojure:只能从尾部位置重复

java - 我的程序现在正在运行这个错误?

javascript - 如何将关键路径数组返回到嵌套 javascript 对象中的值?

Java正则表达式匹配除一种特殊情况外的所有html元素

Python 聊天 : delete variables to clean memory in functions?

java - 乔达 - 打印日期时间忽略时区

c# - 我应该在 .NET 项目中的什么地方放置杂项函数?

java - char[] 中保留的控制台输出导致 OutOfMemoryError

java - 如何在Java 8中同时按desc中的值和键按自然顺序对Map进行排序