Java π的近似
我试着用下面的等式来解这个积。 我觉得这是一个递归问题,但我不知道基本情况在哪里? 否则,我应该将平方根项简化为简化版本并使用迭代方法吗?Java π的近似,java,algorithm,Java,Algorithm,我试着用下面的等式来解这个积。 我觉得这是一个递归问题,但我不知道基本情况在哪里? 否则,我应该将平方根项简化为简化版本并使用迭代方法吗? 停止条件是当z达到1:z(1)=sqrt(2)时。那么,你的函数z似乎是递归的,你的基本情况应该是z(0)或z(1) 所以你应该有 public static double z(double i) { if(i < 1) { //error } else if(i == 1) {
停止条件是当z达到1:z(1)=sqrt(2)时。那么,你的函数
z
似乎是递归的,你的基本情况应该是z(0)或z(1)
所以你应该有
public static double z(double i)
{
if(i < 1)
{
//error
}
else if(i == 1)
{
return C; // where C is some arbitrary constant, your base case: Z(1);
}
else
{
return sqrt(2 + z(i-1));
}
}
公共静态双z(双i)
{
if(i<1)
{
//错误
}
else如果(i==1)
{
返回C;//其中C是任意常数,基本情况为:Z(1);
}
其他的
{
返回sqrt(2+z(i-1));
}
}
不是downvoter,但是您尝试了什么?到目前为止您做了什么,请发布您的代码我只是想知道解决问题的方法:)对于递归方法,基本情况是什么?例如,不需要递归。从a=sqrt(2)
开始,然后a=sqrt(2+a)
。以循环的方式进行。@ajb我也像你说的那样考虑过减少它:)你是说sqrt(2)/2?对,但家庭作业是他的工作。(至少C的值还有待解决:-)使用double作为索引是一种灾难。使用double作为计数器,无法保证准确地命中i==1
(由于众所周知的浮点运算限制)。它显然应该是一个整数。是的,你可以确信这一点,假设i
的起始值小于2**50
左右。这个算法总是精确的。但是你是对的,对应该包含整数的值使用double是一种不好的做法,而且在大多数情况下,在处理浮点数学时,你不能指望=
。很好的一点,尽管在遇到StackOverflower错误之前,我可以检查到i=62795(双关语)