Java中的递归问题

Java中的递归问题,java,recursion,Java,Recursion,我试图用Java解决递归问题,但我还是坚持用这个。我要把问题放在这里,把我做过的事情放在一边。谢谢你的帮助:D 一种新型病毒已经被发现,一家公司要求我们编制一个公式,让我们能够了解病毒在某一时间的数量增长情况。最初,在时间0(h)时,我们有32个病毒,每小时病毒数量翻一番。此外,每小时添加固定数量的病毒(num) a) 执行递归函数,计算一小时内给定病毒的总数和给定病毒的固定数量 b) 计算0、1和2小时的病毒数量,固定数量为10 这就是我所做的: public static void main

我试图用Java解决递归问题,但我还是坚持用这个。我要把问题放在这里,把我做过的事情放在一边。谢谢你的帮助:D

一种新型病毒已经被发现,一家公司要求我们编制一个公式,让我们能够了解病毒在某一时间的数量增长情况。最初,在时间0(h)时,我们有32个病毒,每小时病毒数量翻一番。此外,每小时添加固定数量的病毒(num)

a) 执行递归函数,计算一小时内给定病毒的总数和给定病毒的固定数量

b) 计算0、1和2小时的病毒数量,固定数量为10

这就是我所做的:

public static void main (String [] Args) {
    Scanner in = new Scanner(System.in);
    int h, v, f, result;
    f = 10;
    v = 32;
    System.out.println("Hours: ");
    h = in.nextInt();
   result =  TotalVirus (h, v, f);
    System.out.println("Total : " + result);
}

public static int TotalVirus (int h, int v, int f) {
    int counter = 1, result;

    if ( counter == h) {
        return 1;
    }
    else {
      counter = counter + 1;
      v = v + 32 + f;
      result = TotalVirus(h,v,f);  

    }
    return result;

}
}

我真的不知道在if语句上写什么来结束递归

按以下步骤操作:

import java.util.Scanner;

public class Main {
    public static void main(String[] Args) {
        Scanner in = new Scanner(System.in);
        int h, v, f, result;
        f = 10;
        v = 32;
        System.out.println("Hours: ");
        h = in.nextInt();
        result = TotalVirus(h, v, f);
        System.out.println("Total : " + result);
    }

    public static int TotalVirus(int h, int v, int f) {
        if (h == 0) {
            return v;
        }
        return TotalVirus(h - 1, 2 * v + f, f);
    }
}
运行示例:

Hours: 
0
Total : 32
Hours: 
1
Total : 74
Hours: 
2
Total : 158
另一个示例运行:

Hours: 
0
Total : 32
Hours: 
1
Total : 74
Hours: 
2
Total : 158
另一个示例运行:

Hours: 
0
Total : 32
Hours: 
1
Total : 74
Hours: 
2
Total : 158
按如下方式操作:

import java.util.Scanner;

public class Main {
    public static void main(String[] Args) {
        Scanner in = new Scanner(System.in);
        int h, v, f, result;
        f = 10;
        v = 32;
        System.out.println("Hours: ");
        h = in.nextInt();
        result = TotalVirus(h, v, f);
        System.out.println("Total : " + result);
    }

    public static int TotalVirus(int h, int v, int f) {
        if (h == 0) {
            return v;
        }
        return TotalVirus(h - 1, 2 * v + f, f);
    }
}
运行示例:

Hours: 
0
Total : 32
Hours: 
1
Total : 74
Hours: 
2
Total : 158
另一个示例运行:

Hours: 
0
Total : 32
Hours: 
1
Total : 74
Hours: 
2
Total : 158
另一个示例运行:

Hours: 
0
Total : 32
Hours: 
1
Total : 74
Hours: 
2
Total : 158

您只需要一个尾部递归函数,如下所示:

public static int totalVirus (int h, int v, int f) {

    if ( h == 0 ) {
      return v;
    } 
    return totalVirus( h-1, 2*v + f, f );


}
所以你从一个小时开始,比如说
h=2
,然后在每次调用中递减。在递减过程中,您会添加
2*v+f
,因为每小时病毒会加倍,并且还会添加固定数量的病毒。
当小时数达到
0
时,您只需返回现有的病毒数量。

您所需要的只是一个尾部递归函数,如下所示:

public static int totalVirus (int h, int v, int f) {

    if ( h == 0 ) {
      return v;
    } 
    return totalVirus( h-1, 2*v + f, f );


}
所以你从一个小时开始,比如说
h=2
,然后在每次调用中递减。在递减过程中,您会添加
2*v+f
,因为每小时病毒会加倍,并且还会添加固定数量的病毒。
当小时数达到
0
时,您只需返回现有的病毒数量。

您在哪里定义
计数器
?您混合了葡萄牙语和英语变量名称,请修复它,以便这里的人能够理解@QBrute
counter
contador
我刚刚修复了它对不起,我用西班牙语做的,这就是为什么它是混合的。每次调用递归方法totalVirus时,计数器没有设置为零?方法名称应以小写字符开头。是的,我现在将计数器设置为1,但仍然无法使用if语句来完成递归。您在哪里定义
计数器
?您混合了葡萄牙语和英语变量名称,请修复它,以便这里的人能够理解@QBrute
counter
contador
我刚刚修复了它对不起,我用西班牙语做的,这就是为什么它是混合的。每次调用递归方法totalVirus时,计数器没有设置为零?方法名称应该以小写字符开头。是的,我现在将计数器设置为1,但我仍然丢失了完成递归的if语句。此代码不会使每小时通过的病毒数量增加一倍。SomeDude-解决方案主要是帮助@Exos where/how放置
if
终止条件。他/她能够进行计算部分,并且可以根据需要进行调整。此代码不会使每小时通过的病毒数量增加一倍。SomeDude-解决方案主要是帮助@Exos在何处/如何放置
if
终止条件。他/她能够完成计算部分,并且可以根据需要进行调整。谢谢!现在我明白了,我在return语句中迷失了方向,但现在很明显。当你看到它完成的时候看起来是多么容易啊哈哈:)谢谢!现在我明白了,我在return语句中迷失了方向,但现在很明显。当你看到它完成的时候看起来是多么容易啊哈哈:)