[英]How to minimize the times that list constructor (either copy-constructor ) is called?
[英]How to minimize the times a recursive function is called
因此,對於以下代碼,我試圖減少函數調用自身的時間,以便它更有效。 代碼的目的是使用遞歸執行取冪。
int expo(const int m, const unsigned int n)
{
funcCallCounter++; //counts how many times the function is called
if (n == 0)//base case
{
return 1;
}
else if (n % 2 == 0)// for even numbers
return expo(m*m, n / 2);
else
return m * expo(m, n - 1);//for odd numbers
}
這是我最喜歡的遞歸展覽方法,它總是會比你的方法提供更少的通話
int expo(int a, int n) {
funcCallCounter++;
if (n == 0) {
return 1;
}
int r = expo(a, n / 2);
if (n % 2 == 0) {
//Even n
return r * r;
}
else {
// Odd n
return a *r*r;
}
}
您可以使用班次來加快執行速度。
n % 2
可以用n & 0x01
替換 n / 2^k
可以用n >> k
代替 除法約為20個周期,而班次僅為1-2個周期。
但是,也許編譯器本身會看到taht並且已經進行了這種優化。
最好
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.