下面是收集的一些递归实现的小算法,勤加练习,相信每一个人都能对简单的递归驾驭自如!
从1加到n的一种递归的简洁写法
int AddFrom1ToN_Recursive(int n) { return n<=0 ? 0 : n+AddFrom1ToN_Recursive(n-1); }
求2进制,8进制,16进制的递归写法,原理相同!
void go2(int nNum) { if (nNum == 0) return; else { go2(nNum / 2); printf("%d", nNum % 2); } } void go8(int nNum) { if (nNum == 0) return; else { go8(nNum / 8); printf("%d", nNum % 8); } } void go16(int nNum) { if (nNum == 0) return; else { go16(nNum / 16); printf("%d", nNum % 16); } }
许多时候我们都能够使用一个栈来模拟递归中的数据!
想要拿到高薪,就要有实力,如何让别人觉得你有实力,就是你写代码的能力和写代码的速度,反应速度。多多练习才是王道。
比如说面试官让你求任意一个整数有多少位的for,while,go..while,goto,递归实现在10分钟以内实现,就能考察你的代码能力。
求任意一个整数有多少位的for,while,go..while,goto,递归实现
wei++; for (; num; num /= 10) { wei++; } while (num) { wei++; num /= 10; } do { wei++; num /= 10; }while (num); AAA: if (num) { num /= 10; wei++; goto AAA; }
5050-100-99-98-....-1 for,while,do...while,goto,递归实现
int Reduce(int sum, int n) { if (n == 0) return sum; else { return Reduce(sum-=n, n - 1); } }
下面是求二叉树叶子结点的个数的递归算法,注意使用全局变量和使用函数传参的方式保存叶子结点个数的异同。要特别掌握第二种递归的用法!
int sum = 0; int DLR_CountLeafNum(BiTNode *root)//采用中序遍历的递归算法 { if ( root) //非空二叉树条件,还可写成if(root !=NULL ) { if(!root->lchild && !root->rchild) //是叶子结点则统计并打印 { sum++; printf("%c\n",root->data); } DLR_CountLeafNum(root->lchild); //递归遍历左子树,直到叶子处; DLR_CountLeafNum(root->rchild);//递归遍历右子树,直到叶子处; } return(0); } int DLR_CountLeafNum2(BiTNode *root, int *psum)//采用中序遍历的递归算法 { if ( root) //非空二叉树条件,还可写成if(root !=NULL ) { if(!root->lchild && !root->rchild) //是叶子结点则统计并打印 { (*psum) ++; printf("%c\n",root->data); } DLR_CountLeafNum2(root->lchild, psum); //递归遍历左子树,直到叶子处; DLR_CountLeafNum2(root->rchild, psum);//递归遍历右子树,直到叶子处; } return(0); }
阿里巴巴面试题 用递归判断一个数组是否是递增数组
bool test1(int arr[], int n) { if (n == 0) return true; return test1(arr, n - 1) && arr[n]>arr[n - 1]; } bool test2(int arr[], int n) { if (n == 1) return true; else if (n == 2) return arr[n-1] > arr[n-2]; else return test2(arr, n - 1) && arr[n-1] > arr[n - 2]; } //由斐波那契数列引出的面试题,跳台阶 //一次可以调1级,2级,3级 int step(int nStep) { if (1 == nStep) return 1; else if (2 == nStep) return 2; else if (3 == nStep) return 4; else return step(nStep - 1) + step(nStep - 2) + step(nStep - 3); } //一次可以调1级,2级 int taijie(int n) { if (1 == n) return 1; else if (2 == n) return 2; else return taijie(n - 1) + taijie(n - 2); }