JAVA递归和迭代方法

JAVA递归和迭代方法,java,recursion,iteration,Java,Recursion,Iteration,您好,我有一个关于我的代码的快速问题,我需要知道错误在哪里,以及为什么它没有正确显示递归和迭代方法(这将返回stackoverflow错误)。谢谢 import java.util.Scanner; 公开课进展{ 公共静态int几何体草书(int x){ 如果(x==1) 返回1; 否则{ 返回x*几何体草书(x-1); } } 公共静态int草书(int x){ 如果(x==1) 返回1; 否则{ 返回x*草书(1/(x-1)); } } 公共静态整数几何运算(整数){ int结果=0; 如

您好,我有一个关于我的代码的快速问题,我需要知道错误在哪里,以及为什么它没有正确显示递归和迭代方法(这将返回stackoverflow错误)。谢谢

import java.util.Scanner;
公开课进展{
公共静态int几何体草书(int x){
如果(x==1)
返回1;
否则{
返回x*几何体草书(x-1);
} 
}
公共静态int草书(int x){
如果(x==1)
返回1;
否则{
返回x*草书(1/(x-1));
}
}
公共静态整数几何运算(整数){
int结果=0;
如果(结果==1)
返回结果;
其他的
for(int i=2;i
以以下方式更改此方法:

public static int harmonicRecursive(int x){

   if(x <= 1) //Here

       return 1;

   else {

      return x * harmonicRecursive(1/(x - 1));

   }
}
publicstaticintharmoniccursive(intx){

如果(x由于未正确执行除法而导致堆栈溢出。您正在执行整数除法,这会产生错误的结果。这会导致递归算法中未达到基本条件

要修复它,请使用double并更改基本条件:

public static double harmonicRecursive(double x)
{
   if(x <= 1.0)
   {
       return 1.0;
   }
   else
   {
       return x * harmonicRecursive(1.0 / (x - 1.0));
   }
}
公共静态双音草书(双x)
{

如果(x有问题的行是
返回x*harmonicRecursive(1/(x-1));
harmonicRecursive(intx)
方法中。该
1/(x-1)
部分代码将为所有
x>2
返回
0
。您的
if
语句只检查
x==1
,如果您在该函数中输入大于2的值,这是一个问题。

堆栈跟踪?您在调试方面做了哪些尝试?问题到底是什么?我的意思是,您得到了什么而没有得到的想要/期望?您知道整数类型在除法方面的限制吗?另外,对于带有“harmonic”的函数,您应该使用
double
,而不是
int
是我还是harmonicRecursive永远不会终止?还可以将输入更改为
double
public static double harmonicRecursive(double x)
{
   if(x <= 1.0)
   {
       return 1.0;
   }
   else
   {
       return x * harmonicRecursive(1.0 / (x - 1.0));
   }
}