写递归的技巧
明白一个函数的作用并相信它能完成这个任务,千万不要试图跳进细节。千万不要跳进这个函数里面企图探究更多细节,否则就会陷入无穷的细节无法自拔,人脑能压几个栈啊。
void traverse(TreeNode* root) {if (root == null) return;traverse(root->left);traverse(root->right);}
这几行代码就足以扫荡任何一棵二叉树了。我想说的是,对于递归函数traverse(root),我们只要相信:给它一个根节点root,它就能遍历这棵树,
递归的三大要素
第一要素:明确你这个函数想要干什么
第二要素:寻找递归结束条件
第三要素:找出函数的等价关系式
// 算 n 的阶乘(假设n不为0)int f(int n){if(n <= 2){return n;}// 把 f(n) 的等价操作写进去return f(n-1) * n;}//斐波那契数列int f(int n){// 1.先写递归结束条件if(n < 2){return n;}// 2.接着写等价关系式return f(n-1) + f(n - 2);}//小青蛙跳台阶int f(int n){//f(0) = 0,f(1) = 1,等价于 n<=1时,f(n) = n。if(n <= 1){return 1;}ruturn f(n-1) + f(n-2);}
1137. 第 N 个泰波那契数
泰波那契序列 Tn 定义如下: T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2
给你整数 n,请返回第 n 个泰波那契数 Tn 的值。
const tribonacci = (n) => {const res = [0, 1, 1];const recursion = (n) => {if (res[n] !== undefined) {return res[n];}res[n] = recursion(n - 1) + recursion(n - 2) + recursion(n - 3);return res[n];};return recursion(n);};
