java – 将for循环转换为递归函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 将for循环转换为递归函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2084字,纯文字阅读大概需要3分钟。
内容图文
![java – 将for循环转换为递归函数](/upload/InfoBanner/zyjiaocheng/793/032f63b5e9b6402190c05d503229a575.jpg)
这是一个家庭作业问题.我将以下内容转换为递归函数时遇到问题:
public class Integrate {
public static double integrate(int a, int b, int steps)
{
double sum=0;
double delta = 1.0 * (b - a)/steps;
double x = a;
double f = 0.5*x*x + 3*x + 5;
for (int i = 0; i< steps; i++)
{
x = x + delta;
double fr = 0.5*x*x + 3*x + 5;
double area = f * delta + 0.5*(fr - f)*delta;
sum += area;
f = fr;
}
return sum;
}
public static void main(String [] args)
{
int a, b, step;
a = Integer.parseInt(args[0]);
b = Integer.parseInt(args[1]);
step = Integer.parseInt(args[2]);
System.out.format("Integral is %f\n", integrate(a,b,step));
}
}
这是我到目前为止,但输出与原始代码不同.我无法弄清楚出了什么问题
public class Integrate {
public static double integrate(int a, int b, int steps) {
double sum=0;
int i=0;
sum = rintegrate(a, b, steps, i, sum);
return sum;
}
public static double rintegrate(int a, int b, int steps,
int i, double sum) {
double delta = 1.0 * (b - a)/steps;
double x = a;
double f = 0.5*x*x + 3*x + 5;
if (i<steps) {
x = x + delta;
double fr = 0.5*x*x + 3*x + 5;
double area = f * delta + 0.5*(fr - f)*delta;
sum += area;
f = fr;
i++;
rintegrate(a, b, steps, i, sum);
}
return sum;
}
public static void main(String[] args) {
int a, b, step;
a = Integer.parseInt(args[0]);
b = Integer.parseInt(args[1]);
step = Integer.parseInt(args[2]);
System.out.format("Integral is %f\n", integrate(a,b,step));
}
}
解决方法:
我不打算全面分析这个问题,但这里有一些观察结果
if (i<steps) {
x = x + delta;
double fr = 0.5*x*x + 3*x + 5;
double area = f * delta + 0.5*(fr - f)*delta;
sum += area;
f = fr;
i++;
rintegrate(a, b, steps, i, sum);
}
return sum;
sum = area之间的一切;和归还;是多余的.
>你将f设置为fr,但之后你甚至都不使用f.如果你希望f下次不同,也许你可以将它作为参数传递给你的递归函数
>你以递归方式调用rintegrate(…),但是你没有对它返回的值做任何事情.你可能想要使用那个值.
您应该考虑将递归视为使用较小版本的问题来解决自身问题.
假设你有一个函数,这里有一些你的问题的代码:只计算给定a和delta的第一个段的大小的段
rintegrate(a, b, steps)
{
if(steps <= 1)
{
delta = b-a;
return segment(a, delta)
}
else
{
delta = (b-a)/steps
return segment(a, delta) + rintegrate(a+delta, b, steps-1)
}
}
内容总结
以上是互联网集市为您收集整理的java – 将for循环转换为递归函数全部内容,希望文章能够帮你解决java – 将for循环转换为递归函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。