gpt4 book ai didi

java - 为什么这个阿克曼函数不起作用?

转载 作者:行者123 更新时间:2023-12-01 22:04:37 25 4
gpt4 key购买 nike

给定输入 (2,2),我希望返回 7。该程序没有获得正确的输出,而是在第 16 行返回 java.lang.StackOverflowError。

package main;

import java.math.BigInteger;

public class Ackermann {

public static void main(String[] args) {
System.out.println(ack(BigInteger.valueOf(2),BigInteger.valueOf(2)));

}

public static BigInteger ack(BigInteger a, BigInteger b) {
BigInteger ans;
if (a.equals(0)) ans = b.add(BigInteger.ONE);
else if (b.equals(0)) ans = ack(a.subtract(BigInteger.ONE),BigInteger.valueOf(1));
else ans = ack(a.subtract(BigInteger.ONE), ack(a,b.subtract(BigInteger.ONE))); //line 16
return (ans);
}

}

我已将最大堆栈大小一直增加到 2GB,但在 (2,2) 的小输入处仍然会引发错误。在我开始使用 BigIntegers 而不是 Long 之前,输入 (2,2) 一切正常,但现在却一团糟。

最佳答案

您必须使用equals(BigInteger.ZERO),而不是equals(0)

否则,您将 Bi​​gInteger 与 Integer(自动装箱)进行比较,这将始终为 false。

关于java - 为什么这个阿克曼函数不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33023933/

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