2013-05-10 81 views
-1

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

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

到目前为止,我还没有得到我的代码一定进展,所以我没有什么可以炫耀您。 该方法的签名:

public static int filter(int n, int d) 

任何帮助将是巨大的,

谢谢。

+4

任何你试图得到想要的结果? – 2013-05-10 04:23:36

+0

到目前为止我已经得到了..没有:( – Alan 2013-05-10 04:24:15

+1

所以你不会在没有尝试的情况下从这里得到任何东西:p – stinepike 2013-05-10 04:25:33

回答

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; 
} 

有一件事你应该知道,如果你是在编码新的,并希望成为一个伟大的编码器!我对你的建议是,不要拿走你的大脑中的机会来思考编码问题!永远相信你的大脑。保持耐心。尝试并再试一次。

干杯和快乐编码!

+0

谢谢,谢谢那个建议:-) – Alan 2013-05-10 16:28:38

+0

不客气...... :) – 2013-05-10 16:31:01

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来弄脏手,算术对于整数将做同样的工作。

+3

谢谢,但它不是递归 – Alan 2013-05-10 04:28:37

+0

对不起,我重新编辑 – Sayakiss 2013-05-10 04:30:58

+0

对导致此代码的思维过程的解释将使更好的答案,特别是因为OP是这样做的一个练习 – 2013-05-10 04:39:23