java 疯狂系列使用递归

flseospp  于 2023-01-24  发布在  Java
关注(0)|答案(1)|浏览(101)

我必须打印出一个数组列表,其中的值构成了一个疯狂的序列。在疯狂的序列中,你会得到一个起始数字(10).然后,你需要为每个数字乘以2,直到数字大于100,当数字大于100后,你需要除以3,直到我们得到的数字小于5,注意输入的数字必须大于0,这里不允许使用loop。
我认为这个问题可以用递归来解决。但是我很困惑在产生解决方案的过程中要避免向数组列表中添加不必要的值。我不一定需要这个问题的解决方案,只是想知道如何得到它。谢谢。下面是我的代码:

import java.util.ArrayList;
import java.util.Arrays;

public class A1 {

    public static void main(String[] args) {

        System.out.println(crazySeries(10));
//      System.out.println(benNumber(3, 5));

    }

   /* static int benNumber(int a, int b) {
        // TODO your code goes here

    }*/

    public static ArrayList<Double> crazySeries(int start) {
        // TODO your code goes here
        ArrayList crazySer = new ArrayList();
        crazySer.add(start);
        if (start <= 100) {
            start = start * 2;
            crazySeries(start);
        }
        else if (start >= 100) {
            crazySer.add(start);
            start = start / 3;
            if (start >= 5) {
                crazySer.add(start);
                start = start / 3;
                crazySer.add(start);

                if (start < 5) {
                    crazySer.add(start);
                }
            }

        }
        System.out.println(Arrays.deepToString(crazySer.toArray()));
        return crazySer;
    }

}

我尝试了上面的代码,但它只返回了一些正确的值。我期待的输出如下:
[10.0、20.0、40.0、80.0、160.0、53.3333333333336、17.7777777777777、5.9259259259259265、1.9753086419753088]

0qx6xfy6

0qx6xfy61#

User16320675对此有一个有效的解决方案。您可以实现两个递归方法,一个用于向上,另一个用于向下。或者,您可以实现一个带有标志的递归方法,以了解序列何时反转。

public static void goUp(ArrayList<Double> theList)
public static void goDown(ArrayList<Double> theList)

public static void crazySeriesRecursive(ArrayList<Double> theList, boolean reverseDirection)

相关问题