Java 如何将带有while循环的程序转换为递归?

Java 如何将带有while循环的程序转换为递归?,java,recursion,Java,Recursion,我创建此代码是为了获取y除以x的整数值y始终大于x 如何将其转换为递归 class Main { public static void main(String[] args) { System.out.println(fact(3,6)); } static int fact(int x, int y) { int counter=0, answer=y; while(!(answer==1 || answer<

我创建此代码是为了获取
y
除以
x
的整数值
y
始终大于
x

如何将其转换为递归

class Main {

    public static void main(String[] args) {
        System.out.println(fact(3,6));
    }

    static int fact(int x, int y) {
        int counter=0, answer=y;

        while(!(answer==1 || answer<=0)) {
            counter++;
            answer = answer-x;
        }

        return counter;
    }
}
主类{
公共静态void main(字符串[]args){
系统输出println(事实(3,6));
}
静态整数事实(整数x,整数y){
int计数器=0,答案=y;
而(!(answer==1 | | answer不需要递归;)

返回y/x;

不需要递归;)


返回y/x;

通常,while循环中的条件将成为您的基本情况。通常您还需要将计数器/答案作为参数进行跟踪

比如:

class Main { 
    public static void main(String[] args){
        System.out.println(fact(3,6,0));
    }
    static int fact(int x, int y, int counter){
        if(!(y==1 || y<=0)) return counter;
        counter++;
        y= y-x;
        return fact(x,y,counter);
    }
}
类主{
公共静态void main(字符串[]args){
系统输出println(事实(3,6,0));
}
静态整数事实(整数x,整数y,整数计数器){

如果(!(y==1 | | y通常,while循环中的条件将成为基本情况。通常,您还需要将计数器/答案作为参数进行跟踪

比如:

class Main { 
    public static void main(String[] args){
        System.out.println(fact(3,6,0));
    }
    static int fact(int x, int y, int counter){
        if(!(y==1 || y<=0)) return counter;
        counter++;
        y= y-x;
        return fact(x,y,counter);
    }
}
类主{
公共静态void main(字符串[]args){
系统输出println(事实(3,6,0));
}
静态整数事实(整数x,整数y,整数计数器){
如果(!(y==1 | | y试试这个:

static int fact(int x, int y){
       if (y - x > 1) {
           return fact(x, y-x)+1;
        return 0;
    }
试试这个:

static int fact(int x, int y){
       if (y - x > 1) {
           return fact(x, y-x)+1;
        return 0;
    }
int事实(int x,int y){
if(y
或者,如果您喜欢一行:

int fact(int x, int y) {
    return (y < x ? 0 : 1 + fact(x, y-x));
}
int事实(int x,int y){
返回(y
也就是说,如果是家庭作业(我希望是这样),你只需要请最大的开发者在线社区帮你做,这样你就可以在不做太多工作的情况下获得好成绩

如果不是,你应该问自己“这有什么用,我怎样才能做得更好?”。似乎你只需要将一个整数除以另一个整数,所以没有什么比;)更简单的了。如果你想得到除法的剩余部分,可以使用模(
%
)运算符。如果您想进行取整,您应该知道您的API并检查
Math.round()/ceil()/floor()
,或者通过检查其余部分(请参阅对我被否决的答案的评论)自己完成(为了好玩)

这里的许多开发人员都会问你(并且已经问过):“你想实现什么?”他们肯定是对的。如果你想提高自己的编程技能,请牢记大局,不要忘记为什么要编写这个和那个方法,这始终是我们需要做的

继续编程!:)

intfact(intx,inty){
if(y
或者,如果您喜欢一行:

int fact(int x, int y) {
    return (y < x ? 0 : 1 + fact(x, y-x));
}
int事实(int x,int y){
返回(y
也就是说,如果是家庭作业(我希望是这样),你只需要请最大的开发者在线社区帮你做,这样你就可以在不做太多工作的情况下获得好成绩

如果不是,你应该问自己“这有什么用,我怎样才能做得更好?”。似乎你只需要将一个整数除以另一个整数,所以没有什么比;)更简单的了。如果你想得到除法的剩余部分,可以使用模(
%
)运算符。如果您想进行取整,您应该知道您的API并检查
Math.round()/ceil()/floor()
,或者通过检查其余部分(请参阅对我被否决的答案的评论)自己完成(为了好玩)

这里的许多开发人员都会问你(并且已经问过):“你想实现什么?”他们肯定是对的。如果你想提高自己的编程技能,请牢记大局,不要忘记为什么要编写这个和那个方法,这始终是我们需要做的


继续编程!:)

为什么要将其转换为递归?上次我检查时,循环是递归的一种形式。我想知道如何在递归中执行此操作。您可以使用
while(答案>1)提高可读性
。你为什么试图将其转换为递归?上次我检查时,循环是递归的一种形式。我想知道如何在递归中实现这一点。你可以使用
(答案>1)
。应该是
(y/x)+((y%x==0)?0:1)
@HariShankar,实际上我猜更像
(y/x)+((y%x>x/2)?1:0
,但是你也应该应付
(x/2)%2
…无尽的痛苦;)最后你最好还是用
数学。圆((浮动)y/x)
你需要
数学。ceil
哈哈:P应该是
(y/x)+(y%x==0)?0:1
@HariShankar,实际上我想是更像
(y/x)+(y%x)+(y%x)的东西1:0)
,但是你也应该应付
(x/2)%2
…无尽的痛苦;)最后你最好用
数学。圆((浮动)y/x)
你需要
数学。ceil
哈哈:p