首页 » PHP教程 » php递归乘法技巧_递归乘法算法

php递归乘法技巧_递归乘法算法

访客 2024-11-28 0

扫一扫用手机浏览

文章目录 [+]

根据上图,我们可以知道两个正整数(a和b)的相乘, 实在便是b个a相加,或者a个b相加。

大略的方法便是把a一个一个加起来,或者把b一个一个加起来。
这时时间繁芜度为O(a)或O(b)。

php递归乘法技巧_递归乘法算法

上面的方法有两个地方可以优化:

php递归乘法技巧_递归乘法算法
(图片来自网络侵删)
选出a和b中比较大的一个来相加,韶光繁芜度降为O(min(a,b))。
假设a > b, b为偶数: 当我们加了(b/2)个a时停滞,然后把结果与自己相加;假设a > b, b为奇数: 前面的结果还须要加一个额外的a。
此时,韶光繁芜度降为O(lg min(a,b))。
代码实现

public int multiplyRecursion(int a, int b){ int smaller = a > b ? b : a; int bigger = a > b ? a : b; return multiply(smaller, bigger);}private int multiply(int smaller, int bigger){ if(smaller == 0) return 0; if(smaller == 1) return bigger; int halfSmaller = smaller / 2; int halfResult = multiply(halfSmaller, bigger); if(smaller % 2 == 0) return halfResult + halfResult; else return halfResult + halfResult + bigger;}

韶光繁芜度:O(lg min(a, b))。

标签:

相关文章