问题一:求n的阶乘:n! = n(n-1)!;
n! = n(n-1)(n-2)....32*1;
方案一:便利
public static void main(String[] args) {
// System.out.println(1 * 2 * 3 * 4 * 5);
int jc = 1;
for (int x = 1; x <= 5; x++) {
jc *= x;
}
System.out.println(jc);
}
方案二:递归
public static void main(String[] args) {
System.out.println(jc(5));
}
/*
* 递归要写一个方法出来。
* 我假设我有一个方法jc(n)表示n的阶乘。
* 请问,你如何表示n-1的阶乘。jc(n-1)。
* 规律:n! = n*(n-1)!
* 出口条件是什么:n=1的时候,结果是1。
*/
public static int jc(int n){
if(n==1){
return 1;
}else {
return n*jc(n-1);
}
}
问题二:
* 有一对兔子,从出生后第3个月起每个月都生一对兔子,
* 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,
* 问第20个月的兔子对数为多少?
方案一(数组):
/*
* 从第三个月开始,每个月是前两个月之和。第一月和第二月是已知道的,并且都是1。
* 斐波那契数列。
*
* 兔子对数
* 第一月 1
* 第二月 1
* 第三月 2
* 第四月 3
* 第五月 5
* 第六月 8
* ...
*
*/
public static void main(String[] args) {
// 数组
int[] arr = new int[20];
arr[0] = 1;
arr[1] = 1;
/*
arr[2] = arr[0] + arr[1];
arr[3] = arr[1] + arr[2];
arr[4] = arr[2] + arr[3];
...
*/
for(int x=2; x<arr.length; x++){
arr[x] = arr[x-2] + arr[x-1];
}
System.out.println(arr[19]);
//变量的交换
int a = 1;
int b = 1;
for(int x=0; x<18; x++){
int temp = a;
a = b;
b = temp + b;
}
System.out.println(b);
}
方案二:(变量的交换)
/*
* 假设相邻的两个月份被我定义为变量a,b
* 第一个相邻:a=1,b=1
* 第二个相邻:a=1,b=2
* 第三个相邻:a=2,b=3
* 第四个相邻:a=3,b=5
* 第五个相邻:a=5,b=8
*/
public static void main(String[] args) {
//变量的交换
int a = 1;
int b = 1;
for(int x=0; x<18; x++){
int temp = a;
a = b;
b = temp + b;
}
System.out.println(b);
}
方案三:(递归)
/*
* 1,1,2,3,5,8...
*
* 规律:从第三项开始,每一项是前两项之和。 出口:第一项和第二项是已知的。
*
* 假设我有一个方法:f(n)表示第n项。 请问n-1项和n-2项怎么表示呢? f(n-1),f(n-2)
*/
public static void main(String[] args) {
System.out.println(f(20));
}
public static int f(int n) {
if (n == 1 || n == 2) {
return 1;
} else {
return f(n - 1) + f(n - 2);
}
}
网友评论