冒泡算法和递归算法demo
package com.kindess.springbootswager.controller;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @author kindess
* @description 测试demo
*/
public class Test {
/**
* 递归算法
*
* @param num
* @return
*/
public static int countNum(int num) {
//求和:1+2+...+num
/* if (num > 0) {
return num + countNum(num - 1);
}
return 0;*/
//阶乘:1*2*...+num
if (num <= 1) {
return 1;
}
return num * countNum(num - 1);
}
/**
* 题意:一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。
* 这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
*
* 算法步骤:
* 1) 令num等于2,n等于7;
* 2) 计算前一天的总鸭子数量num = (num + 1) * 2;
* 3) 计算并输出第n天卖掉的鸭子数量;
* 4) 将n减去1,判断n是否大于0,若是,则输出总鸭子数量num,否则,递归调用函数继续进行计算。
*
* @param num 最后一天剩余的鸭子的数量
* @param counter 村庄的个数
* @return
*/
public static int duck_sale(int num, int counter) {
num = (num + 1) * 2;
System.out.println("第" + counter + "个村子卖出的鸭子的数量是:" + (num / 2 - 1));
//计数器减1
counter--;
if (counter > 0) {
//说明前面鸭子没卖完 递归调用方法 算出该村子卖出的鸭子的数量
duck_sale(num, counter);
} else {
//说明鸭子卖完了
System.out.println("鸭子的总数是:" + num);
}
return num;
}
/***
* 角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。
* 求经过多少次可得到自然数1。
* 如:输入22,
* 输出 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
* STEP=16
*
* 算法步骤:
* 1)定义计数器counter=0 输入自然数的值
* 2)判断n 是否为偶数,若是,则n=n/2 若不是,则n=n*3+1
* 3)判断n是否等于1 若是,则输出counter,若不是继续 调用jiaogu()
*郑州看妇科的医院 http://www.ytsgfk120.com/
* @param n 输入的自然数 所要求的数值
* @param counter 输出最后结果所需要的调用几次
* @return
*/
public static int jiaogu(int n, int counter) {
//这个计数器不可以在这里赋值的,这样每一次调用方法进来之后,都会重置counter的值
//int counter = 1;
if (n == 1) {
return 1;
} else {
//计数器+1
counter++;
if (n % 2 == 0) {
n = n / 2;
} else {
n = n * 3 + 1;
}
System.out.println("输出当前自然数的值是:" + n);
//递归调用
jiaogu(n, counter);
}
return counter;
}
public static void main(String[] args) {
System.err.println("地归阶乘:" + countNum(5));
System.err.println("递归案例:" + duck_sale(2, 2));
System.err.println("角谷定理案例:" + jiaogu(3, 3));
System.err.println("********************冒泡排序****************");
int[] arr = {5, 12, 58, 98, 2, 1, 5, 36, 0};
//外层循环控制循环趟数
for (int i = 1; i < arr.length; i++) {
//内层循环控制每一趟排序多少次
for (int j = 0; j < arr.length - i; j++) {
//控制排序结果,小于就是降序,大于就是升序
if (arr[j] > arr[j + 1]) {
int t = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = t;
}
}
}
System.out.println("输出升序后的数组:");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
System.err.println("********************集合排序****************");
List list = new ArrayList();
list.add(10);
list.add(40);
list.add(30);
list.add(20);
list.add(11);
//list.sort(Integer::compareTo);
Collections.sort(list);
System.err.println(list);
}
}
标题