【发布时间】:2020-07-16 14:38:18
【问题描述】:
我尝试在 WebAssembly 中创建递归和基于数组的斐波那契序列,看看哪个更快,从而确定 WebAssembly 是否支持尾递归优化(因为我找不到任何关于它的数据)。
(module
(memory 1)
(func $recursive_fib (param $n i32) (result i32)
(if (i32.lt_s (local.get $n) (i32.const 2))
(return (local.get $n))
)
(local.get $n)
(i32.const 1)
(i32.sub)
(call $recursive_fib)
(local.get $n)
(i32.const 2)
(i32.sub)
(call $recursive_fib)
(i32.add)
)
(export "recursive_fib" (func $recursive_fib))
(func $array_fib (param $n i32) (result i32) (local $i i32)
(i32.const 0)
(i32.store (i32.const 0))
(i32.const 1)
(i32.store (i32.const 4))
(i32.const 2)
(local.set $i)
(loop
(br_if 1 (i32.gt_s (local.get $i) (local.get $n)))
(local.get $i)
(i32.const 1)
(i32.sub)
(i32.const 4)
(i32.mul)
(i32.load)
(local.get $i)
(i32.const 2)
(i32.sub)
(i32.const 4)
(i32.mul)
(i32.load)
(i32.add)
(i32.store (i32.mul (i32.const 4) (local.get $i)))
(local.get $i)
(i32.const 1)
(i32.add)
(local.set $i)
(br 0)
)
(local.get $n)
(i32.const 4)
(i32.mul)
(i32.load)
)
(export "array_fib" (func $array_fib))
)
但是,当我尝试编译它时,我得到了这个错误:
fibonacci.wat:26:14: error: type mismatch in br_if, expected [i32] but got []
(br_if 1 (i32.gt_s (local.get $i) (local.get $n)))
^^^^^
我做错了什么?
【问题讨论】:
标签: fibonacci webassembly