递归 - 返回一个比参数更大的数字的新数字

时间:2013-05-10 04:22:05

标签: java recursion

我有一个练习,我必须编写一个接收整数和数字d的递归方法。此方法必须返回一个新数字,仅包含大于d的数字。

例如,对于数字19473和数字3,返回的数字将是947。

到目前为止,我的代码没有取得一些进展,所以我没有任何东西可以告诉你。 该方法的签名:

public static int filter(int n, int d)

任何帮助都会很棒,

谢谢。

2 个答案:

答案 0 :(得分:5)

public static int filter(int n, int d)
{
   if (n==0) return 0;
   if (n%10>d) return 10*filter(n/10,d)+n%10;
   else return filter(n/10,d);
}

理解的关键:

整数n(n> 10),假设a = n / 10 b = n%10。

你可以看到filter(n)=(String)filter(a)+(String)filter(b)(我的意思是,将结果转换为字符串并连接两个字符串。它在语法中无效,它只是用于理解它。)

但我们不需要弄脏String,算术会为整数做同样的工作。

答案 1 :(得分:1)

以下是您的答案:

int filter(int n, int d) {
    if (n >= 0 && d >= 0) {    // n and d non-negetive

        if (n == 0) {   // terminating criteria
            return 0;
        } else {
            int currDigit = n % 10;
            if (n % 10 > d) {
                return filter(n / 10, d) * 10 + currDigit; //gathering digits greater thand d
            } else {
                return filter(n / 10, d);  // ignoring digits less than or equal d
            }
        }

    }
    return -1;
}

你应该知道的一件事,如果你是编码新手,想成为一名优秀的程序员!我给你的建议是,不要忘记大脑中的机会来思考编码问题!永远相信你的大脑。保持耐心。尝试再试一次。

干杯和快乐的编码!