C基础之递归(思想很重要,学会找规律)
2016-01-05 16:22
225 查看
递归思想的条件:1.函数自己调用自己 2.函数必须有一个固定的返回值(如果没有这个条件会发生死循环)
----规律很重要
简单递归题目一:
设计一个函数计算一个整数的n次方,比如2的3次方,就是8
步骤:
1.定义方法,以及方法中的参数--power( int base ,int n )
2.根据定义的方法来找规律:
函数终止条件:n==0时,返回1;n<0时,返回-1;红色箭头表示函数的执行过程,蓝色箭头表示函数达到条件后开始一层一层的返回值,具体代码如下:
简单递归题目二:
设计一个函数,计算1+2+3+4+5+6+7+8+...+n的值
要求n必须>0
步骤:
1.定义方法,以及方法中的参数--leiJia( int n )
2.根据定义的方法来找规律:
leiJia(0)==0;
leiJia(1)==leiJia(0) + 1;
leiJia(2)==leiJia(1) + 2;
leiJia(3)==leiJia(2) + 3;
.
.
.
leiJia(n)==leiJia(n-1) + n;
函数终止条件:n==1时,返回1;n<0时,返回0;具体代码如下:
简单递归题目三:
设计一个函数计算1!+2!+3!+……+n!的值
4! = 1 * 2 * 3 * 4;
n! = 1 * 2 *.... *n
步骤:
1.定义方法,以及方法中的参数--pidAdd(n);
2.根据定义的方法来找规律:
pidAdd(1)==1;
pidAdd(2)==pidAdd(1) + 2! ;
pidAdd(3)==pidAdd(2) + 3! ;
.
.
.
pidAdd(n)==pidAdd(n-1) + n! ;
函数终止条件:n==1时,返回1;n<0时,返回0;具体代码如下:
递归的学习不止这些,在以后的学习过程中继续整理,共同学习。
----规律很重要
简单递归题目一:
设计一个函数计算一个整数的n次方,比如2的3次方,就是8
步骤:
1.定义方法,以及方法中的参数--power( int base ,int n )
2.根据定义的方法来找规律:
函数终止条件:n==0时,返回1;n<0时,返回-1;红色箭头表示函数的执行过程,蓝色箭头表示函数达到条件后开始一层一层的返回值,具体代码如下:
long power(int base, int n) { if (n<0) return -1; if (n == 0) return 1; // n一定>0 return power(base, n-1) * base; }
简单递归题目二:
设计一个函数,计算1+2+3+4+5+6+7+8+...+n的值
要求n必须>0
步骤:
1.定义方法,以及方法中的参数--leiJia( int n )
2.根据定义的方法来找规律:
leiJia(0)==0;
leiJia(1)==leiJia(0) + 1;
leiJia(2)==leiJia(1) + 2;
leiJia(3)==leiJia(2) + 3;
.
.
.
leiJia(n)==leiJia(n-1) + n;
函数终止条件:n==1时,返回1;n<0时,返回0;具体代码如下:
long leiJia(int n) { /* // 这里的0随便 if (n<=0) return 0; // 仔细分析一下,可以发现这行代码可以省略 //if (n == 1) return 1; return leiJia(n-1) + n; */ return (n<=0) ? 0 : ( leiJia(n-1) + n ); }
简单递归题目三:
设计一个函数计算1!+2!+3!+……+n!的值
4! = 1 * 2 * 3 * 4;
n! = 1 * 2 *.... *n
步骤:
1.定义方法,以及方法中的参数--pidAdd(n);
2.根据定义的方法来找规律:
pidAdd(1)==1;
pidAdd(2)==pidAdd(1) + 2! ;
pidAdd(3)==pidAdd(2) + 3! ;
.
.
.
pidAdd(n)==pidAdd(n-1) + n! ;
函数终止条件:n==1时,返回1;n<0时,返回0;具体代码如下:
long pieAdd(int n) { if (n == 1) return 1; return pieAdd(n-1) * dieCheng(n);//dieCheng 函数实现的是从1*2*3*...*n }
递归的学习不止这些,在以后的学习过程中继续整理,共同学习。
相关文章推荐
- PHP函数内访问全局变量
- 计算OBB四个顶点的坐标
- Lua学习之路-3
- 游戏辅助开发工具—TC、按键、易语言网络验证系统制作
- 云计算的应用解决方案
- 云计算的应用解决方案
- iOS判断邮箱格式是否正确
- Android学习笔记2
- 今天才发现51CTO还有这个,我决定在这里记录我的学习历程
- 云计算的应用解决方案
- webservice-axis2 遇到问题整理
- 我的DWR实例教程
- Oracle连接字符串总结
- oracle数据库表空间
- iOS - 程序启动的完整过程
- Objective-c命名规范
- android studio快捷键
- test
- EasyTouch摇杆插件使用中遇到的坑
- setjmp和longjmp的使用