gpt4 book ai didi

java - 递归函数变量初始化

转载 作者:行者123 更新时间:2023-11-30 07:51:21 25 4
gpt4 key购买 nike

编辑:sum 和 i 的初始值应为 0。

我接到了一个需要使用递归的任务。目前代码不会运行,因为我还没有初始化变量“sum”和“i”。

有没有人知道我如何在不向 evalHornerRec 方法添加额外参数的情况下完成任务?

// example data: a = {2, 1, -2, 6, 4, 3}, x = 3

public static double evalHornerRec(double[] a, double x)
{

int len = a.length;
int i;
double sum;


if (i >= len)
{
return sum;
}

else
{
sum += a[i] * Math.pow(x, i);
i++;
return evalHornerRec(a, x);
}

}

最佳答案

看起来每个递归调用都应该在较小的数组上运行。如果您不能将 i 作为参数添加到递归调用,您可以传递一个子数组而不是整个数组。

至于sum,我假设它应该是该方法返回的值,所以我假设您应该将递归调用的结果添加到当前调用中添加的项.

public static double evalHornerRec(double[] a, double x) {
int len = a.length;
if (len <= 0) {
return 0.0;
} else {
double[] subArray = Arrays.copyOf(a,len-1);
return evalHornerRec(subArray, x) + a[len-1] * Math.pow(x, len-1);
}
}

编辑:我的回答是基于你在问题中似乎在做什么,但基于 this description of Horner's method ,也许你应该计算的递归实际上是:

evalHornerRec(a,x) = a[0] + x * evalHornerRec (sub array of a[1] to a[n-1])

看起来像这样:

public static double evalHornerRec(double[] a, double x) { 
if (a.length == 1) {
return a[0];
} else {
double[] subArray = new double[a.length - 1];
System.arraycopy(a, 1, subArray, 0, subArray.length);
return a[0] + x * evalHornerRec(subArray, x);
}
}

P.S.,这两种递归方法是等价的。对于您建议的输入 (a = {2, 1, -2, 6, 4, 3}, x = 3),两者都给出相同的结果 - 1202.0。但是,第二种方法对于递归实现更有意义。第一个可以用一个简单的 for 循环计算而无需任何递归,因此它违背了使用递归的目的。

关于java - 递归函数变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47250825/

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