递归算法
2016-05-29 21:23
260 查看
递归算法
定义:递归算法就是在当前的函数中直接或间接的调用自己并传给相应的参数的算法。
递归函数的特点
(1)函数要直接或间接调用自身。
(2)要有递归终止条件检查,即递归终止的条件被满足后,则不再调用自身函数。
(3)在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。
1、使用递归算法求解斐波那契数列
Fibonacci数列
即斐波那契数列,用数学公式表示出来就是:
F(0)=0,
F(1)=1,
F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)
/**
* 使用递归算法求解斐波那契数列
*/
private static int recursion(int n) {
{// 使用递归
if (n == 0) {
return 0;
} else if (n == 1) {
return 1;
} else {
return recursion(n - 1) + recursion(n - 2);
}
}
}
2、使用递归算法求n!
算法:使用递归公式f(n) = n*f(n-1)求n!。
private static int fn(int n) {
if (n<0) {
throw new RuntimeException("数字非法");
}
int sum = 0;
if (n == 0 || n==1) {
return 1;
}else if(n>1){
sum = n*fn(n-1);
}
return sum;
}
当然求n!还可以使用累积法:
int s=1;
for(int x=1; x<=n; x++){
s = s*x;
}
3、使用递归算法实现求职1+1/2+1/3+...+1/n
算法:使用递归公式f(n) = 1/n + f(n-1)。
private static float getSum(int n) {
if (n < 1) {
throw new RuntimeException("数字非法");
}
float sum = 0;
if (n == 1) {
return 1;
} else if (n > 1) {
sum = (float) (1.0 / n) + getSum(n - 1);
}
return sum;
}
定义:递归算法就是在当前的函数中直接或间接的调用自己并传给相应的参数的算法。
递归函数的特点
(1)函数要直接或间接调用自身。
(2)要有递归终止条件检查,即递归终止的条件被满足后,则不再调用自身函数。
(3)在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。
1、使用递归算法求解斐波那契数列
Fibonacci数列
即斐波那契数列,用数学公式表示出来就是:
F(0)=0,
F(1)=1,
F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)
/**
* 使用递归算法求解斐波那契数列
*/
private static int recursion(int n) {
{// 使用递归
if (n == 0) {
return 0;
} else if (n == 1) {
return 1;
} else {
return recursion(n - 1) + recursion(n - 2);
}
}
}
2、使用递归算法求n!
算法:使用递归公式f(n) = n*f(n-1)求n!。
private static int fn(int n) {
if (n<0) {
throw new RuntimeException("数字非法");
}
int sum = 0;
if (n == 0 || n==1) {
return 1;
}else if(n>1){
sum = n*fn(n-1);
}
return sum;
}
当然求n!还可以使用累积法:
int s=1;
for(int x=1; x<=n; x++){
s = s*x;
}
3、使用递归算法实现求职1+1/2+1/3+...+1/n
算法:使用递归公式f(n) = 1/n + f(n-1)。
private static float getSum(int n) {
if (n < 1) {
throw new RuntimeException("数字非法");
}
float sum = 0;
if (n == 1) {
return 1;
} else if (n > 1) {
sum = (float) (1.0 / n) + getSum(n - 1);
}
return sum;
}
相关文章推荐
- android 图片压缩
- 随机采样和随机模拟:吉布斯采样Gibbs Sampling实现文档分类
- 部署informatica出现0ra 01280
- Ubuntu l连接网络
- Redis的数据类型
- Android 最佳性能实践之内存管理(二)
- 导出SQL Server中所有Job的最简单方法
- 继承(一)
- 个人工作总结06(冲刺二)
- 《JavaScript学习笔记五》:选项卡和简易日历的实现
- Activity not started, its current task has been brought to the front
- 第113课:Spark Streaming电商广告点击综合案例实战模拟点击数据的生成和数据表SQL建立
- 4、在JavaWeb里面,常用的request2Bean的实现
- idea+charles 抓包
- SpringMvc系列之SpringMvc常用请求映射器实例
- iOS 模态视图,阻尼动画
- 重积分和线面积分总结
- Python发送邮件程序
- ASP.NET总结
- SQL Server作业的备份