在递归中使用除法

时间:2015-08-06 17:32:42

标签: java recursion

我有以下程序

public static int doSomething(int num){
    if(Math.abs(num) > 9){
        return (1 + doSomething( num / 10));
    }
    else{
        return 1;
    }
}
public static void main(String[] args){
    System.out.println(doSomething(333));
}

这就是我理解的方式。如果数字是333。 333 / 10给了我33。从33> 9它再次运行递归循环给我3。 在3之后它进入else条件。

我不明白为什么打印3作为答案。

我是java新手,所以仍然试图了解基础知识。

我不相信这个问题是重复的。作为初学者,我的问题要简单得多。我相信的问题还在于使用javascript而不是java。

2 个答案:

答案 0 :(得分:5)

看,如果doSomething(),会返回Math.abs(num) < 9的内容? 1?是的,你是对的。好的,让我们开始。

doSomething(333) => 1 + doSomething(33) // 33 not less than 9
                 => 1 + (1 + doSomething(3)) // now 3 is less than 9
                 => 1 + (1 + {1})
                 => 3

答案 1 :(得分:2)

递归不在1 + 33上,而只在33上,所以它是:

doSomething(333)
= 1 + doSomething(33)
= 1 + 1 + doSomething(3)
= 1 + 1 + 1
= 3