package com.user.test;
//递归
public class SumNumber {
public static void main(String[] args) {
SumNumber test = new SumNumber();
int rest1 = test.sum1(100);
int rest2 = test.sum2(100);
System.out.println(rest1);
System.out.println(rest2);
int rest3 = test.factorial(5);
System.out.println(rest3);
int rest4 = test.factorial2(10);
System.out.println(rest4);
test.factorial3(10);
int rest5 = test.factorial4(19);
System.out.println(rest5);
}
public int sum1(int num) {
int sum = 0;
for (int i = 0; i <= num; i++) {
sum += i;
}
return sum;
}
public int sum2(int num) {
if (num == 1) {
return 1;
} else {
return num + sum2(num - 1);
}
}
// 递归求阶乘(n!)的算法
public int factorial(int num) {
if (num == 1) {
return 1;
} else {
return num * factorial(num - 1);
}
}
//已知有一个数列:f(0) = 1,f(1) = 4,f(n+2)=2*f(n+1) + f(n),其中n是大于0 的整数,求f(10)的值。
public int factorial2(int num) {
if (num == 0) {
return 1;
} else if (num == 1) {
return 4;
} else {
return 2 * factorial2(num - 1) + factorial2(num - 2);
}
}
// 输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值 1 1 2 3 5 8 13 21 34 55
public void factorial3(int num) {
int[] arr = new int[num];
arr[0] = 1;
arr[1] = 1;
for (int i = 0; i < arr.length; i++) {
if (i > 1) {
arr[i] = arr[i - 2] + arr[i - 1];
}
System.out.print(arr[i] + "\t");
}
System.out.println();
}
// 已知一个数列:f(20) = 1,f(21) = 4,f(n+2) = 2*f(n+1)+f(n), 其中n是大于0的整数,求f(10)的值
public int factorial4(int num) {
if(num == 20) {
return 1;
}else if(num ==21) {
return 4;
} else {
return factorial4(num+2)-2*factorial4(num+1);
}
}
}
控制台输出:
5050
5050
120
10497
1 1 2 3 5 8 13 21 34 55
2