1.1 从∑到∫:用循环理解求和与累积
副标题程序员的数学急救包——无论你写Java、Python、Go还是Rust看到∑就该想到一个for循环。开篇灵魂拷问翻开源码或者论文你大概率会撞见这样的符号是不是瞬间头大别慌。作为一个写了成千上万行循环的程序员你有天然的优势——这些符号在代码世界里全是循环和累加器。本节目标让你今后见到∑、∏、∫、Δ条件反射般地在大脑中生成一个for循环或者while循环的代码片段。本文提供Java / Python / JavaScript / C / Rust / Go六种语言实现覆盖99%后端与算法工程师技术栈。1. ∑高级版的 for 循环累加器数学定义核心代码直译语言核心实现Pythontotal0; for i in range(m, n1): totala(i)Javaint total0; for(int im; in; i) totala(i);JavaScriptlet total0; for(let im; in; i) totala(i);Cint total0; for(int im; in; i) totala(i);Rustlet mut total0; for i in m..n { totala(i); }Gototal:0; for i:m; in; i { totala(i) }面试题实战∑i1100i2∑i1100i2题目计算 ∑i1100i2∑i1100i2手写代码并分析时间复杂度。解法一循环法六语言对照Pythondef sum_of_squares_loop(n100): s 0 for i in range(1, n1): s i * i return sJavapublic class SumSquares { public static int sumLoop(int n) { int s 0; for (int i 1; i n; i) { s i * i; } return s; } }JavaScriptfunction sumSquaresLoop(n 100) { let s 0; for (let i 1; i n; i) { s i * i; } return s; }Cint sumSquaresLoop(int n 100) { int s 0; for (int i 1; i n; i) { s i * i; } return s; }Rustfn sum_squares_loop(n: i32) - i32 { let mut s 0; for i in 1..n { s i * i; } s }Gofunc sumSquaresLoop(n int) int { s : 0 for i : 1; i n; i { s i * i } return s }时间复杂度O(n)空间复杂度O(1)解法二公式法数学降维打击平方和公式各语言一行代码实现Pythondef sum_of_squares_formula(n100): return n * (n 1) * (2 * n 1) // 6Javapublic static int sumFormula(int n) { return n * (n 1) * (2 * n 1) / 6; }JavaScriptconst sumSquaresFormula n n * (n 1) * (2 * n 1) / 6;Cint sumFormula(int n) { return n * (n 1) * (2 * n 1) / 6; }Rustfn sum_squares_formula(n: i32) - i32 { n * (n 1) * (2 * n 1) / 6 }Gofunc sumSquaresFormula(n int) int { return n * (n 1) * (2*n 1) / 6 }时间复杂度O(1)空间复杂度O(1)2. ∏累乘器核心代码对照计算阶乘 n!∏i1nin!∏i1niPythondef factorial(n): result 1 for i in range(1, n1): result * i return resultJavapublic static long factorial(int n) { long result 1; for (int i 1; i n; i) { result * i; } return result; }JavaScriptfunction factorial(n) { let result 1; for (let i 1; i n; i) result * i; return result; }Clong long factorial(int n) { long long result 1; for (int i 1; i n; i) result * i; return result; }Rustfn factorial(n: u64) - u64 { (1..n).product() } // 或手动循环 fn factorial_manual(n: u64) - u64 { let mut res 1; for i in 1..n { res * i; } res }Gofunc factorial(n int) int { res : 1 for i : 1; i n; i { res * i } return res }3. ∫矩形法近似积分计算精确值约0.3333Pythondef integral(f, a, b, n10000): dx (b - a) / n total 0.0 for i in range(n): total f(a i * dx) * dx return totalJavapublic static double integral(FunctionDouble, Double f, double a, double b, int n) { double dx (b - a) / n; double total 0.0; for (int i 0; i n; i) { total f.apply(a i * dx) * dx; } return total; }JavaScriptfunction integral(f, a, b, n 10000) { const dx (b - a) / n; let total 0; for (let i 0; i n; i) { total f(a i * dx) * dx; } return total; }C#include functional double integral(std::functiondouble(double) f, double a, double b, int n 10000) { double dx (b - a) / n; double total 0.0; for (int i 0; i n; i) { total f(a i * dx) * dx; } return total; }Rustfn integralF(f: F, a: f64, b: f64, n: usize) - f64 where F: Fn(f64) - f64, { let dx (b - a) / n as f64; (0..n).map(|i| f(a i as f64 * dx) * dx).sum() }Gofunc integral(f func(float64) float64, a, b float64, n int) float64 { dx : (b - a) / float64(n) total : 0.0 for i : 0; i n; i { total f(afloat64(i)*dx) * dx } return total }4. Δ差分计算序列的一阶差分。Pythondef diff(arr): return [arr[i] - arr[i-1] for i in range(1, len(arr))]Javapublic static int[] diff(int[] arr) { int[] res new int[arr.length - 1]; for (int i 1; i arr.length; i) { res[i-1] arr[i] - arr[i-1]; } return res; }JavaScriptconst diff arr arr.slice(1).map((v, i) v - arr[i]);C#include vector std::vectorint diff(const std::vectorint arr) { std::vectorint res; for (size_t i 1; i arr.size(); i) res.push_back(arr[i] - arr[i-1]); return res; }Rustfn diff(arr: [i32]) - Veci32 { arr.windows(2).map(|w| w[1] - w[0]).collect() }Gofunc diff(arr []int) []int { res : make([]int, len(arr)-1) for i : 1; i len(arr); i { res[i-1] arr[i] - arr[i-1] } return res }5. 符号→代码速查表多语言版数学符号代码本质PythonJavaGoRust∑∑累加循环sum(...)for(int i..)for i:..(m..n).sum()∏∏累乘循环math.prodfor乘for乘(m..n).product()∫∫循环累加×dxfordxfordxfordxmap().sum()ΔΔ相邻差arr[i]-arr[i-1]同上同上windows(2)课后习题六语言可任选实现基础将 S∑k1501k(k1)S∑k150k(k1)1 翻译成你擅长的语言代码。面试LeetCode 268改编找出缺失的数字分别用求和法与异或法实现。扩展根据 e∑k0∞1k!e∑k0∞k!1实现函数approx_e(n_terms)估算自然常数 e。