由易到难学习递归的精华
来源:互联网 发布:淘宝 折扇 编辑:程序博客网 时间:2024/05/16 03:42
下面是收集的一些递归实现的小算法,勤加练习,相信每一个人都能对简单的递归驾驭自如!
从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];elsereturn 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;elsereturn 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;elsereturn taijie(n - 1) + taijie(n - 2);}
0 0
- 由易到难学习递归的精华
- PYTHON 学习书籍(由易到难)
- PL/SQL 块的学习(精华)
- Vim 使用学习的精华资源
- 收藏的精华Python学习文章
- 递归函数的学习
- 递归算法的学习
- 数据结构递归的学习
- 递归算法的学习
- 尾递归的学习
- oracle 由易到难源代码一
- oracle由易到难源代码二
- oracle 由易到难源代码三
- 博弈论习题集(由易到难)
- Java多线程由易到难
- BGP学习精华
- JDBC学习精华总结
- XML精华学习入门
- 黑马程序员-day21-IO流(字符编码)
- Hibernate缓存
- C#泛型详解
- Head First设计模式C++实现--第三章:装饰者(Decorator)模式
- Expires / Cache-Control / Last-Modified / If-Modified-Since / ETag / If-None-Match 区别使用
- 由易到难学习递归的精华
- wxWidgets中的类型转换
- google code jam 2014 RC_B
- Myeclipse报错Errors running builder 'DeploymentBuilder' on project 'xxx'
- 请对输入的一组数据(0~9)进行排序,规则:数据出现次数多的,数字大的排在前面。
- 【学习OpenCV】OpenCV起步--下载离线文档
- is too old (format 29) to work with client version '1.8.9 (r1591380)' (expects format 31).
- Git历险记(五)
- ehcache缓存同步配置