黑马程序员技术交流社区
标题:
【记录】代码练习-递归
[打印本页]
作者:
Kevin.Kang
时间:
2015-7-24 10:01
标题:
【记录】代码练习-递归
package com.kxg;
/*
* 递归:方法定义中调用本身方法
*
* 注意:
* 1.递归一定要有出口,否则就是死递归
* 2.递归次数不能太对,否则就内存溢出
* 3.构造方法不能使用递归
*
* 需求:递归实现5的阶乘
* 5! = 5*4*3*2*1
* 5! = 5*4!
*/
public class DiGuiDemo {
public static void main(String[] args) {
// 循环实现
int i = 1;
for (int x = 2; x <= 5; x++) {
i *= x;
}
System.out.println(i);
// 递归实现
System.out.println(JieCheng(5));
}
// 递归需要写一个方法:
// 返回值类型:int 参数列表:int i
// 出口条件: if(i == 1){ return 1;}
private static int JieCheng(int i) {
if (i == 1) {
return 1;
} else {
return i * JieCheng(i - 1);
}
}
}
复制代码
作者:
Kevin.Kang
时间:
2015-7-24 10:41
本帖最后由 Kevin.Kang 于 2015-7-24 11:27 编辑
斐波那契数列问题:
package com.kxg;
import java.util.Scanner;
/*
* 斐波那契数列:
* 1,1,2,3,5,8,13,21...
* 需求:求第n项的数字
*/
public class TuZiDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("你想查第几项:");
int num = sc.nextInt();
// 定义一个数组存储斐波那契数列
int[] arr = new int[num];
// 已知0和1索引的值为1
arr[0] = 1;
arr[1] = 1;
// 循环得到所有索引的值,并存储起来
for (int x = 2; x < arr.length; x++) {
arr[x] = arr[x - 1] + arr[x - 2];
}
// 所求n项在数组中为n-1项
System.out.println("数组实现:" + arr[num - 1]);
System.out.println("递归实现:" + ShenTu(num));
}
private static int ShenTu(int i) {
if (i == 1 || i == 2) {
return 1;
} else {
return ShenTu(i - 1) + ShenTu(i - 2);
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2