有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java这个算法的基本情况是什么?

我正在学习递归并理解它的大部分内容,但这一点让我感到困惑,它相当基本,但我不知道哪一条语句是基本情况,我认为这是打印行,但显然可能是错误的。我知道最终的结果是什么,但似乎无法理解它是如何一步步实现的

代码:

private static final String DIGIT_TABLE = "0123456789abcdef";


public static void printIt(long n, int base) {

if(n>=base)
  printIt(n / base, base);
System.out.print(DIGIT_TABLE.charAt((int) n % base));

}

共 (3) 个答案

  1. # 1 楼答案

    在n进制数字系统中,0-(n-1)中的所有数字都可以用一位数字表示法表示。例如,在二进制(2进制)中,0和1可以表示为一位数,而在十六进制(16进制)中,0-15之间的所有数字都可以表示为一位数(a=10,b=11…f=15)。您的程序通过将长n除以base来减少它,直到它小于base,然后在该base系统中打印它的值。我假设这里的基数是16,因为你的字符串是直到'f'。这意味着您的方法将以n的十六进制表示形式打印MSB。请注意,如果您存储了“n/base”的所有商,您将得到相反的十六进制表示形式

  2. # 2 楼答案

    基本情况是当n<base时,或者当剩余的数字可以表示为基本base中的单个数字时

    下面是一个示例,说明了如果基数为16,程序将如何执行:

    n_1: 0x1a5
    n_2: 0x1a
    n_3: 0x1
    ****
    print n_3 % 16 -> 1
    print n_2 % 16 -> a
    print n_1 % 16 -> 5
    

    在标记为****的点处,条件的计算结果为false,因此它不会进入无限递归

  3. # 3 楼答案

    如果你只是在寻找递归关系的基本情况或终止条件,那么试试这个

    public static long printIt(long n, int base) {
    
            if(n==0 || (base==0 || base==1)) return 0;
    
            if(n>=base)
                printIt(n / base, base);
            long ln = DIGIT_TABLE.charAt((int) n % base);
    
            return ln;
        }