结构调整2
This commit is contained in:
13
ExampleCodes/SpeedTest/fib.fig
Normal file
13
ExampleCodes/SpeedTest/fib.fig
Normal file
@@ -0,0 +1,13 @@
|
||||
import std.io;
|
||||
|
||||
func fib(x:Int) -> Int
|
||||
{
|
||||
if (x <= 1)
|
||||
{
|
||||
return x;
|
||||
}
|
||||
return fib(x-1) + fib(x-2);
|
||||
}
|
||||
|
||||
var result := fib(25);
|
||||
io.println("result: ", result);
|
||||
11
ExampleCodes/SpeedTest/fib.py
Normal file
11
ExampleCodes/SpeedTest/fib.py
Normal file
@@ -0,0 +1,11 @@
|
||||
from time import time as tt
|
||||
|
||||
def fib(x:int) -> int:
|
||||
if x <= 1: return x;
|
||||
return fib(x-1) + fib(x-2)
|
||||
|
||||
if __name__ == '__main__':
|
||||
t0 = tt()
|
||||
result = fib(30)
|
||||
t1 = tt()
|
||||
print('cost: ',t1-t0, 'result:', result)
|
||||
84
ExampleCodes/SpeedTest/fibBenchmark.fig
Normal file
84
ExampleCodes/SpeedTest/fibBenchmark.fig
Normal file
@@ -0,0 +1,84 @@
|
||||
import std.io;
|
||||
import std.time;
|
||||
import std.value;
|
||||
|
||||
func benchmark(fn: Function, arg: Any) -> Null
|
||||
{
|
||||
io.println("Testing fn:", fn, "with arg:", arg);
|
||||
const start := time.now();
|
||||
|
||||
const result := fn(arg);
|
||||
|
||||
const end := time.now();
|
||||
const duration := new time.Time{
|
||||
end.since(start)
|
||||
};
|
||||
io.println("=" * 50);
|
||||
io.println("fn returns:", result, "\n");
|
||||
io.println("Cost:", duration.toSeconds(), "s");
|
||||
io.println(" ", duration.toMillis(), "ms");
|
||||
}
|
||||
|
||||
var memo := {};
|
||||
|
||||
func fib_memo(x)
|
||||
{
|
||||
if memo.contains(x)
|
||||
{
|
||||
return memo.get(x);
|
||||
}
|
||||
if x <= 1
|
||||
{
|
||||
memo[x] = x;
|
||||
return x;
|
||||
}
|
||||
var result := fib_memo(x - 1) + fib_memo(x - 2);
|
||||
memo[x] = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
func fib_iter(n)
|
||||
{
|
||||
var a := 0;
|
||||
var b := 1;
|
||||
for var i := 0; i < n; i = i + 1
|
||||
{
|
||||
var temp := a + b;
|
||||
a = b;
|
||||
b = temp;
|
||||
}
|
||||
return a;
|
||||
}
|
||||
|
||||
func fib(x)
|
||||
{
|
||||
if x <= 1
|
||||
{
|
||||
return x;
|
||||
}
|
||||
return fib(x - 1) + fib(x - 2);
|
||||
}
|
||||
|
||||
func fib_tail(n, a=0, b=1) {
|
||||
if n == 0 { return a; }
|
||||
if n == 1 { return b; }
|
||||
return fib_tail(n-1, b, a+b);
|
||||
}
|
||||
|
||||
const n := 30;
|
||||
|
||||
io.println("! fib(" + value.string_from(n) + "):");
|
||||
benchmark(fib, n);
|
||||
io.print("\n\n");
|
||||
|
||||
io.println("! fib_memo(" + value.string_from(n) + "):");
|
||||
benchmark(fib_memo, n);
|
||||
io.print("\n\n");
|
||||
|
||||
io.println("! fib_iter(" + value.string_from(n) + "):");
|
||||
benchmark(fib_iter, n);
|
||||
io.print("\n\n");
|
||||
|
||||
io.println("! fib_tail(" + value.string_from(n) + "):");
|
||||
benchmark(fib_tail, n);
|
||||
io.print("\n\n");
|
||||
27
ExampleCodes/SpeedTest/fibLoopTest.fig
Normal file
27
ExampleCodes/SpeedTest/fibLoopTest.fig
Normal file
@@ -0,0 +1,27 @@
|
||||
import std.io;
|
||||
import std.value;
|
||||
|
||||
var callCnt:Int = 0;
|
||||
func fib(x:Int) -> Int
|
||||
{
|
||||
callCnt = callCnt + 1;
|
||||
if (x <= 1)
|
||||
{
|
||||
return x;
|
||||
}
|
||||
return fib(x-1) + fib(x-2);
|
||||
}
|
||||
|
||||
var fibx:Int;
|
||||
io.print("input an index of fib ");
|
||||
fibx = value.int_parse(io.read());
|
||||
|
||||
var cnt:Int = 0;
|
||||
io.println("test forever");
|
||||
while (true)
|
||||
{
|
||||
cnt = cnt + 1;
|
||||
io.println("test ", cnt,",result: ", fib(fibx));
|
||||
io.println("func `fib` called ", callCnt);
|
||||
callCnt = 0;
|
||||
}
|
||||
Reference in New Issue
Block a user