java数位倒置递归_有人能解释一下这个递归代码如何在java中反转int吗?
r根本不用
10*r+n%10
實際上,這是一件很棘手的事情,而且很酷。
這是一個很好的例子,說明變量命名不當會使代碼難以理解。我們有3行代碼可以實際執行某些操作,但它的工作原理并不明顯。
private static int NOTHING_REVERSED_SO_FAR = 0;
private static int reverse(int numberToBeReversed, int reversalSoFar) {
if (numberToBeReversed == 0) return reversalSoFar;
return reverse(numberToBeReversed/10, 10*reversalSoFar + numberToBeReversed%10);
}
public static int reverse(int numberToBeReversed) {
return reverse(numberToBeReversed, NOTHING_REVERSED_SO_FAR);
}
所以我們首先調用public方法。假設我們通過123作為數字的倒數。這將調用未經更改傳遞123的私有版本,并將reversalSoFar初始化為0。
所以馬上,你就可以看到,如果numberToberVersed是0,我們就返回到目前為止計算出的值。我建議您編寫一個junit測試來挑戰他的斷言。
所以當我們遞歸的時候,我們到底在做什么?首先,我們并不是真的把數字除以10。我們在做分區,通過
遞歸地。未更改反向的數字。
分割結果為123->123/10->12。(由于是int數據類型,分數丟失了。)好的,我們將傳遞一個12作為第一個參數。第二個論點呢。我們知道我們通過了0的逆轉。所以我們有10*(0)+(123)%10。123在這里是正確的,因為我們沒有改變數字。結果是3。所以我們將再次遞歸,通過12和3。
現在,進行下一次迭代。
0. 123 0
1. 12 3
2. ?? ?
總結
以上是生活随笔為你收集整理的java数位倒置递归_有人能解释一下这个递归代码如何在java中反转int吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的世界java版月步教程_《我的世界》
- 下一篇: java arraylist枚举器遍历_