题目:
1.用递归算法求Fibonacci数列的前40个数,要求输出的时候每5个数换一行。
2.设计一个分治算法,在一个具有n个元素的数组中,寻找第2大元素。
运行截图:
第一张
第二张
源代码:
package com.serein.d6_algorithm;
public class Fibonacci {
public static void main(String[] args) {
for (int i = 1; i < 40; i++) {
if (i % 5 == 0){
System.out.println(fib(i));
}else {
System.out.print(fib(i) + " ");
}
}
}
public static int fib(int i){
if (i == 1 || i == 2){
return 1;
} else {
return fib(i-1) + fib(i -2);
}
}
}
package com.serein.d6_algorithm;
import java.util.Scanner;
public class DivideAndConquer {
static int arr[];
public static void main(String[] args) {
int input;
System.out.println("请输入该数组有多少个数字:");
Scanner sc = new Scanner(System.in);
input = sc.nextInt();
System.out.println("请输入" + input + "个数字:");
arr = new int[input];
for (int i = 0; i < input; i++) {
int inputs = sc.nextInt();
arr[i] = inputs;
}
NumericFeatures n = go(0,input - 1);
System.out.println("该数组第二大的值是:" + n.second);
}
public static NumericFeatures go(int left, int right){
NumericFeatures num = new NumericFeatures();
if (left == right){
num.max = arr[left];
num.second = -1; //默认数组都是正整数
} else if (left == right -1) {
num.max = Math.max(arr[left],arr[right]);
num.second = Math.min(arr[left],arr[right]);
}else {
int mid = (left + right) / 2;
NumericFeatures n1 = go(left,mid);
NumericFeatures n2 = go(mid + 1,right);
if (n1.max > n2.max){
num.max = n1.max;
num.second = Math.max(n1.second,n2.max);
}else {
num.max = n2.max;
num.second = Math.max(n1.max,n2.second);
}
}
return num;
}
}
class NumericFeatures{
int max;
int second;
NumericFeatures(){};
}
今天的分享就到这里了。诸位如果觉得有帮助,欢迎评论点赞转发哦!