gpt4 book ai didi

java - 从递归函数返回多个值

转载 作者:行者123 更新时间:2023-11-29 09:09:43 26 4
gpt4 key购买 nike

我遇到这个问题,我必须将十进制数转换为二进制数,然后将这些位存储在链表中,其中头节点是最高有效位,最后一个节点是最低有效位。解决问题本身其实很简单,只需要不断递归地对 2 取模,然后将结果添加到列表中,直到十进制数变为 0。

我被卡住的地方是我必须编写函数,以便它返回一对数字,(无论是数组还是列表)最高有效位和最后有效位。即:在函数中输入 14 将返回 (1, 0),因为 14 在二进制中是 1110。

我确实可以轻松访问 MSB 和 LSB(getFirst()、getLast())。

该函数只能接受一个参数,即十进制数。

目前我有这个当前代码:

public static void encodeBin(int n) {
if(n == 0) return; //Base case
else {
if(n % 2 == 0)
theList.addFirst(0);
else
theList.addFirst(1);
encodeBin(n / 2);
}
// return?
}

问题是我不知道如何返回这 2 个值。有返回值意味着我不能自己调用​​ encodeBin()。

此外,我应该在哪里创建列表?如果我放类似 List<Integer> = new LinkedList<Integer>() 的东西在函数的最开始,然后每次函数调用自身时,它都会创建一个新列表并在新列表中添加位而不是原始列表,对吗?(第一次调用函数时创建的列表)

有人知道怎么解决吗?

最佳答案

您不能返回 2 个值。您将不得不返回一些包含这 2 个值的对象。一个数组或一些新对象,具体取决于您的作业要求以及将在何处使用此函数。

对于链表的创建,你需要的是一个递归的辅助方法。您的公共(public)方法将用于初始化对象、开始递归并返回结果。这允许您的实际递归函数具有超过 1 个参数。

public static SOME_TYPE encodeBin(int n) {
LinkedList result = new LinkedList();
encodeBin_helper(result,n);
// return the MSB and LSB
}

public static void encodeBin_helper(LinkedList theList, int n) {
if(n == 0) return; //Base case
else {
if(n % 2 == 0)
theList.addFirst(0);
else
theList.addFirst(1);
encodeBin_helper(theList, n/2);
}

}

关于java - 从递归函数返回多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13075456/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com