From 620bfb1f1d566f770cf7e4e2520e2779519e17b5 Mon Sep 17 00:00:00 2001 From: gaofer <35647389+gaofer@users.noreply.github.com> Date: Sat, 2 Sep 2023 16:09:13 +0800 Subject: [PATCH] Iteration and recursion code in js/ts (#703) * feat(JS and TS):add the section of iteration and recursion * feat(JS and TS):add the section of iteration and recursion * feat(JS and TS):add the section of iteration and recursion --- .../iteration.js | 70 ++++++++++++++++++ .../recursion.js | 46 ++++++++++++ .../iteration.ts | 72 +++++++++++++++++++ .../recursion.ts | 48 +++++++++++++ 4 files changed, 236 insertions(+) create mode 100644 codes/javascript/chapter_computational_complexity/iteration.js create mode 100644 codes/javascript/chapter_computational_complexity/recursion.js create mode 100644 codes/typescript/chapter_computational_complexity/iteration.ts create mode 100644 codes/typescript/chapter_computational_complexity/recursion.ts diff --git a/codes/javascript/chapter_computational_complexity/iteration.js b/codes/javascript/chapter_computational_complexity/iteration.js new file mode 100644 index 000000000..abf8ae70d --- /dev/null +++ b/codes/javascript/chapter_computational_complexity/iteration.js @@ -0,0 +1,70 @@ +/** + * File: iteration.js + * Created Time: 2023-08-28 + * Author: Gaofer Chou (gaofer-chou@qq.com) + */ + +/* for 循环 */ +function forLoop(n) { + let res = 0; + // 循环求和 1, 2, ..., n-1, n + for (let i = 1; i <= n; i++) { + res += i; + } + return res; +} + +/* while 循环 */ +function whileLoop(n) { + let res = 0; + let i = 1; // 初始化条件变量 + // 循环求和 1, 2, ..., n-1, n + while (i <= n) { + res += i; + i++; // 更新条件变量 + } + return res; +} + +/* while 循环(两次更新) */ +function whileLoopII(n) { + let res = 0; + let i = 1; // 初始化条件变量 + // 循环求和 1, 4, ... + while (i <= n) { + res += i; + // 更新条件变量 + i++; + i *= 2; + } + return res; +} + +/* 双层 for 循环 */ +function nestedForLoop(n) { + let res = ''; + // 循环 i = 1, 2, ..., n-1, n + for (let i = 1; i <= n; i++) { + // 循环 j = 1, 2, ..., n-1, n + for (let j = 1; j <= n; j++) { + res += `(${i}, ${j}), `; + } + } + return res; +} + +/* Driver Code */ +const n = 5; +let res; + +res = forLoop(n); +console.log(`for 循环的求和结果 res = ${res}`); + +res = whileLoop(n); +console.log(`while 循环的求和结果 res = ${res}`); + +res = whileLoopII(n); +console.log(`while 循环(两次更新)求和结果 res = ${res}`); + +const resStr = nestedForLoop(n); +console.log(`双层 for 循环的遍历结果 ${resStr}`); diff --git a/codes/javascript/chapter_computational_complexity/recursion.js b/codes/javascript/chapter_computational_complexity/recursion.js new file mode 100644 index 000000000..48538ac79 --- /dev/null +++ b/codes/javascript/chapter_computational_complexity/recursion.js @@ -0,0 +1,46 @@ +/** + * File: recursion.js + * Created Time: 2023-08-28 + * Author: Gaofer Chou (gaofer-chou@qq.com) + */ + +/* 递归 */ +function recur(n) { + // 终止条件 + if (n === 1) return 1; + // 递:递归调用 + const res = recur(n - 1); + // 归:返回结果 + return n + res; +} + +/* 尾递归 */ +function tailRecur(n, res) { + // 终止条件 + if (n === 0) return res; + // 尾递归调用 + return tailRecur(n - 1, res + n); +} + +/* 斐波那契数列:递归 */ +function fib(n) { + // 终止条件 f(1) = 0, f(2) = 1 + if (n === 1 || n === 2) return n - 1; + // 递归调用 f(n) = f(n-1) + f(n-2) + const res = fib(n - 1) + fib(n - 2); + // 返回结果 f(n) + return res; +} + +/* Driver Code */ +const n = 5; +let res; + +res = recur(n); +console.log(`递归函数的求和结果 res = ${res}`); + +res = tailRecur(n, 0); +console.log(`尾递归函数的求和结果 res = ${res}`); + +res = fib(n); +console.log(`斐波那契数列的第 ${n} 项为 ${res}`); diff --git a/codes/typescript/chapter_computational_complexity/iteration.ts b/codes/typescript/chapter_computational_complexity/iteration.ts new file mode 100644 index 000000000..8ecd6d8a7 --- /dev/null +++ b/codes/typescript/chapter_computational_complexity/iteration.ts @@ -0,0 +1,72 @@ +/** + * File: iteration.ts + * Created Time: 2023-08-28 + * Author: Gaofer Chou (gaofer-chou@qq.com) + */ + +/* for 循环 */ +function forLoop(n: number): number { + let res = 0; + // 循环求和 1, 2, ..., n-1, n + for (let i = 1; i <= n; i++) { + res += i; + } + return res; +} + +/* while 循环 */ +function whileLoop(n: number): number { + let res = 0; + let i = 1; // 初始化条件变量 + // 循环求和 1, 2, ..., n-1, n + while (i <= n) { + res += i; + i++; // 更新条件变量 + } + return res; +} + +/* while 循环(两次更新) */ +function whileLoopII(n: number): number { + let res = 0; + let i = 1; // 初始化条件变量 + // 循环求和 1, 4, ... + while (i <= n) { + res += i; + // 更新条件变量 + i++; + i *= 2; + } + return res; +} + +/* 双层 for 循环 */ +function nestedForLoop(n: number): string { + let res = ''; + // 循环 i = 1, 2, ..., n-1, n + for (let i = 1; i <= n; i++) { + // 循环 j = 1, 2, ..., n-1, n + for (let j = 1; j <= n; j++) { + res += `(${i}, ${j}), `; + } + } + return res; +} + +/* Driver Code */ +const n = 5; +let res: number; + +res = forLoop(n); +console.log(`for 循环的求和结果 res = ${res}`); + +res = whileLoop(n); +console.log(`while 循环的求和结果 res = ${res}`); + +res = whileLoopII(n); +console.log(`while 循环(两次更新)求和结果 res = ${res}`); + +const resStr = nestedForLoop(n); +console.log(`双层 for 循环的遍历结果 ${resStr}`); + +export {}; \ No newline at end of file diff --git a/codes/typescript/chapter_computational_complexity/recursion.ts b/codes/typescript/chapter_computational_complexity/recursion.ts new file mode 100644 index 000000000..eb0246eb0 --- /dev/null +++ b/codes/typescript/chapter_computational_complexity/recursion.ts @@ -0,0 +1,48 @@ +/** + * File: recursion.ts + * Created Time: 2023-08-28 + * Author: Gaofer Chou (gaofer-chou@qq.com) + */ + +/* 递归 */ +function recur(n: number): number { + // 终止条件 + if (n === 1) return 1; + // 递:递归调用 + const res = recur(n - 1); + // 归:返回结果 + return n + res; +} + +/* 尾递归 */ +function tailRecur(n: number, res: number): number { + // 终止条件 + if (n === 0) return res; + // 尾递归调用 + return tailRecur(n - 1, res + n); +} + +/* 斐波那契数列:递归 */ +function fib(n: number): number { + // 终止条件 f(1) = 0, f(2) = 1 + if (n === 1 || n === 2) return n - 1; + // 递归调用 f(n) = f(n-1) + f(n-2) + const res = fib(n - 1) + fib(n - 2); + // 返回结果 f(n) + return res; +} + +/* Driver Code */ +const n = 5; +let res: number; + +res = recur(n); +console.log(`递归函数的求和结果 res = ${res}`); + +res = tailRecur(n, 0); +console.log(`尾递归函数的求和结果 res = ${res}`); + +res = fib(n); +console.log(`斐波那契数列的第 ${n} 项为 ${res}`); + +export {}; \ No newline at end of file