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