我需要帮助理解这个递归代码

时间:2017-11-30 03:14:13

标签: java recursion

问题是“写一个函数,持久性,它接受一个正参数num并返回它的乘法持久性,这是你必须将num中的数字乘以直到达到一个数字的次数。”

public static void main(String[] args){
    System.out.println(persistence(39));
    //System.out.println(persistence(999));
}
public static int persistence(long n) {
    long m = 1, r = n;

    if (r / 10 == 0) {
        return 0;
    }
    for(r = n; r!= 0; r /=10){
        m *= r % 10;
    }
    //System.out.println(m);
    return persistence(m) + 1;
}

我理解if语句是针对什么时候它最终是一个数字并且它将返回0.如果我能得到关于m变量的解释以及它的用途。 for循环的作用以及何时返回持久性(m)为什么它上面有+ 1。

1 个答案:

答案 0 :(得分:0)

计算将会是这样的。

让我们理解问题陈述。

  

写一个函数,持久性,它接受一个正参数num   并返回其乘法持久性,即数量   倍数必须乘以num中的数字,直到达到一个数字   。位数"

说:39

  

这是你必须乘以num中的数字的次数   直到你达到一位数。

所以,我们需要这样做才能满足上述说法。

39 = 3*9 = 27  (1 time) - persistance(39)
27 = 2*7 = 14  (2rd time)  - persistance(27)
14 = 1*4 = 4   (3rd time)- persistance(14)

所以,根据问题陈述,我们来到一位数。

  

您可以参考以下内容,了解它。

enter image description here

  

为什么会有+ 1。

计算递归函数完成计算的次数。