【打破思惟局限性】算法问题中的奇技淫巧(不断更新)

一、数字和问题(Update:2016-7-14)

你们在最初开始学习编程的时候必定都作过这样一道题:git

  步骤I       给定一个天然数n,编程

  步骤II     将n中每一位数字相加,获得一个新的天然数m学习

  步骤III    赋值:n=mspa

  步骤IV     判断:若是n只有一位数字(即0≤n<10)则输出数字n,不然返回到步骤II。code

没错这是道简单的题目,大部分同窗的思路也跟上面给出的四步差很少。嗯,我也一直是这么作的,直到在CodeWars上面看到了这样一段代码……blog

1 public class DRoot {
2   public static int digital_root(int n) {
3     return (n != 0 && n%9 == 0) ? 9 : n % 9;
4   }
5 }

嗯,没错,不须要用递归反复加,只要求一个模一步就出来了。至于为何能够这么作,以本人微弱的数学功底只能从找规律的角度理解一下了:以下表所示,求和结果其实是从1到9反复循环,所以只要用n模9并对结果为0的状况单独处理一下就能够了……若是你们有更好的想法欢迎在评论里给出。递归

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息