使用If语句进行Java递归

时间:2016-09-07 06:37:25

标签: java recursion

我有一个Java编程问题,我必须使用if语句的递归才能让这个程序工作。不幸的是,我不能使用循环,只会让这更难。

使用RECURSION编写此功能。 *询问用户输入低和高(含)之间的数字,读取它。 *保持阅读直到用户输入范围内的数字(包括)。使用回归

 public static int readWithinRange(Scanner in, PrintStream out, int low, int high)
 {
    // notice I'm passing the Scanner and the PrintStream; do NOT read from 
    // System.in or write to System.out

    out.println("Please enter a number.");
    int number1=in.nextInt();       
    if (number1 <= low) {
        return low;
    } else if (number1 >= high) {
        return high;
    } else if (number1 >= low && number1 <= high){
        return number1;
    } 
    return number1;
    /*return low;*/ 
 }

以下是执行此方法的代码:

public void testReadWithinRange()
{
    InputStream in = new ByteArrayInputStream( " 10 20".getBytes() );
    PrintStream out=new PrintStream(new ByteArrayOutputStream());

    Scanner in_s=new Scanner(in);
    int ans=Assignment4.readWithinRange(in_s,out,15,25);
    Assert.assertEquals(20, ans);

    in_s=new Scanner(new ByteArrayInputStream( "10 20".getBytes() ));
    ans=Assignment4.readWithinRange(in_s,out,10,20);
    Assert.assertEquals(10, ans);
    in_s=new Scanner(new ByteArrayInputStream( "10 20 21".getBytes() ));
    Assert.assertEquals(21, Assignment4.readWithinRange(in_s,out,21,30));        
}

@Grade(points=25)
@Test

非常感谢任何帮助,积分将得到回报!提前致谢

1 个答案:

答案 0 :(得分:1)

从你的问题我怀疑你并不确定递归是什么。请阅读here以获取摘要。

一般来说,递归方法的形式如下:

func(value)
    if value is base case
        return result
    else
        combine result with func(simpler value)

在你的情况下,这将转化为:

int readWithinRange(int low, int high) {
    int guess = in.nextInt();
    if (guess >= low && guess <= high)
        return guess;
    else
        return readWithinRange(low, high);
}

请注意,您的混淆也可能是因为这是教授递归的可怕的问题。它自然是迭代的,递归解决方案不能很好地反映问题。特别是,你的问题不需要结果,因为递归调用完成,这使得递归的使用完全没有意义。