常規遞迴和尾遞迴的效能比較

2021-06-09 00:35:10 字數 873 閱讀 8490

package net.liuyx.algorithm;

public class fibonacci , };

/*** @param args

*/public static void main(string args)

private static tester tests =

}, */new tester("尾遞迴")

private long fib2(int n, int acc1, int acc2)

}, new tester("尾遞迴轉換成迴圈性")

if (n == 1)

return acc2;

int tmp = acc1;

acc1 = acc2;

acc2 = acc2 + tmp;

n--;}}

}, new tester("經過演算法優化的 ")

private int fibonaccialogrithm(int n) , };

while (n != 0)

a = multiply(a, a);

n = n >> 1;

}return result;

}private int multiply(int a, int b)

} };

private static abstract class tester

public void test(int n)

abstract long fib(int n);}}

結果:

遞迴與尾遞迴的比較

public static int factorial int n 對於遞迴,必須要強調兩個特性 1.必須有乙個或多個基礎情況 遞迴出口 即無需遞迴而直接得出結果。2.程式中的遞迴呼叫一定經過一系列的關於同一問題的子問題的求解最終迭代到遞迴出口。通俗來說,遞迴就是將乙個規模為n的問題轉化為求解規模為...

遞迴和尾遞迴

c語言中編譯預處理的三種形式的命令 巨集定義,檔案包含,條件編譯命令。1 巨集定義主要是 define,undef 如下 define pi 3.1415926 不帶引數的巨集定義 define max a,b a b?a b 帶引數的巨集定義 說明 巨集定義在c語言與c 語言中是相通的。下面舉例說...

遞迴和尾遞迴的比較,斐波那契

相信如果乙個人讓我們求乙個斐波那契數列,如果你學過c語言,你一定會說用遞迴法啊,很容易就實現了,但是如果人家讓你求斐波那契的第50個數,而且你對遞迴了解的話,估計幫你不會說遞迴了,如果了解夠深的話,其實你會說遞迴也可以求出來。1 遞迴 首先我們來說說什麼是遞迴,簡單的來說,就是乙個函式需要呼叫自己來...