Skip to content

Commit

Permalink
フィボナッチはいったん完了
Browse files Browse the repository at this point in the history
  • Loading branch information
erutobusiness committed Nov 25, 2024
1 parent f5ac643 commit a24c014
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 6 deletions.
8 changes: 2 additions & 6 deletions src/pages/wasm/Fibonacci.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,8 @@ const Component: FC = () => {
const handleRun = () => {
setSingleResultTs('計算中...');
setSingleResultAs('計算中...');

const tsResult = measureExecutionTime(n);
const asResult = measureExecutionTime(n);

setSingleResultTs(tsResult);
setSingleResultAs(asResult);
setSingleResultTs(measureExecutionTime(n));
setSingleResultAs(measureExecutionTime(n));
};

const handleRun10 = async () => {
Expand Down
30 changes: 30 additions & 0 deletions src/utils/wasm/fibonacci.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,33 @@ export function fibonacci(n: number): number {
}
return fibonacci(n - 1) + fibonacci(n - 2);
}

// この実装では、おおよそ 黄金数^n 回 (たとえば n=40 なら 4億回ほど) fibonacci 関数を実行するみたい
// https://ja.stackoverflow.com/questions/54887/%E3%83%95%E3%82%A3%E3%83%9C%E3%83%8A%E3%83%83%E3%83%81%E6%95%B0%E5%88%97%E3%81%AE%E8%A8%88%E7%AE%97%E9%87%8F%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
// なお、通常はメモ化や動的計画法などにより計算の効率を高める

// メモ化のコード例
export function fibonacciMemoized(
n: number,
memo = new Map<number, number>(),
): number {
if (n <= 1) return n;
const memoized = memo.get(n);
if (memoized !== undefined) return memoized;
const result =
fibonacciMemoized(n - 1, memo) + fibonacciMemoized(n - 2, memo);
memo.set(n, result);
return result;
}

// 動的計画法のコード例
export function fibonacciIterative(n: number): number {
if (n <= 1) return n;

let a = 0;
let b = 1;
for (let i = 2; i <= n; i++) {
[a, b] = [b, a + b];
}
return b;
}

0 comments on commit a24c014

Please sign in to comment.