//用遞歸調用的方法求n!
public static int fo(int n){
if(n<2){ return 1;
}else{
return n*fo(n-1);
}
}
//用遞歸法求和1+2+3+4......+n
public static int add(int m){
if(m==1){
return 1;
}else{
return m+add(m-1);
}
}
/*
* 一列數的規則如下: 1、1、2、3、5、8、13、21、34...... 求第30位數是多少, 用遞歸算法實現。
* */
static int find30(int n){
if (n <= 0)
return 0;
else if(n > 0 && n <= 2)
return 1;
return find30(n-1)+find30(n-2);
}
/*
* 將一整數逆序後放入一數組中(要求遞歸實現) Ex : 1234 變爲 {4,3,2,1}
*/
static int revert(int rs[], int i, int number) {
if (i < rs.length) {
rs[i] = number % 10;
number = (number - number % 10) / 10;
return revert(rs, i + 1, number);
} else {
return 0;
}
}
/*
* 遞歸實現迴文判斷(如:abcdedbca就是迴文,判斷一個面試者對遞歸理解的簡單程序)
*/
static boolean loopWord(String str, int i) {
if (str.charAt(i) == str.charAt(str.length() - 1 - i)) {
if (i == (str.length() + 1) / 2)
return true;
return loopWord(str, i + 1);
} else {
return false;
}
}
/*
* 分解成質因數(如435234=251*17*17*3*2,據說是華爲筆試題)
*/
static int dividePrimeToFactors(int num, int factor) {
while ((factor < num) && (num % factor != 0))
factor++;
System.out.print(factor + " ");
num = num / factor;
if (factor >= num)
return factor;// 結束判斷
return dividePrimeToFactors(num, factor + 1);
}
public static void main(String[] args) {
System.out.println(find30(30));
int number = 1234;
int[] rs = new int[(number + "").length()];
revert(rs, 0, number);
for (int i = 0; i < rs.length; i++) {
System.out.print(rs[i]);
}
System.out.println(loopWord("1234321", 0));
dividePrimeToFactors(435234, 2);
}
}
//養牛23457
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
//用一個二維數組存放輸入的m 和k
int[][] arr= new int[n][2];
for(int i=0;i<n;i++) {
int m = sc.nextInt();
int k = sc.nextInt();
arr[i][0] = m;
arr[i][1] = k;
}
solution(arr);
}
public static void solution(int[][] arr) {
ArrayList<Integer> list = new ArrayList();
for(int i=0;i<arr.length;i++) {
int m = arr[i][0];
int k = arr[i][1];
int res = getSum(m, k);
list.add(res);
}
for(Integer i:list) {
System.out.println(i);
}
}
public static int getSum(int m,int k) {
int i=0;
if(k<5) {
return m*(k+1);
}else {
return getSum(m,k-1)+getSum(m,k-4);
}
}
// 遞歸方法decimalToBinary,把一個十進制數轉換成二進制數
public static void decimalToBinary(int num) {
if (num == 0) { // 當num=0時,循環結束
return;
} else {
decimalToBinary(num / 2); // 調用遞歸方法
System.out.print(num % 2);
}
}
//遞歸方法yueshu,求兩個數的最大公約數 ,用兩個數的絕對值與這兩個數較小的那個一直比較,直到相等爲止。
public static void yueshu(int num1, int num2) {
if (num1 == num2) {
System.out.println(num1); // num1=num2時,結束
} else {
yueshu(abs(num1 - num2), min(num1, num2)); // 調用遞歸方法
}
}
// 遞歸方法hanon,求漢諾塔算法
public static void hanon(int n, char a, char b, char c) {
if (n == 1) {
move(1, a, c);// 最後一種情況是,把A柱子上盤子移到C柱子上。
return;
}
hanon(n - 1, a, c, b); // 遞歸,把n-1個盤子從A 盤上藉助C盤移到B盤上
move(n, a, c);// 調用move()方法
hanon(n - 1, b, a, c);// 遞歸,把把n-1個盤子從B盤上藉助A盤移到C盤上
}
public static void move(int n, char a, char c) {
System.out.println(n + ":" + a + "-->" + c);// 打印移動盤子情況
}
/**
* 打印出九九乘法表
* @param i
*/
public static void m(int i) {
if (i == 1) {
System.out.println("1*1=1 ");
} else {
m(i - 1);
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + j * i + " ");
}
System.out.println();
}
}
// 利用遞歸實現,將輸入的一個字符串中的所有元素進行排序並輸出
public static void permute(char[] list, int low, int high) {
int i;
if (low == high) {
String cout = "";
for (i = 0; i <= high; i++) {
cout += list[i];
}
System.out.println(cout);
} else {
for (i = low; i <= high; i++) {
char temp = list[low];
list[low] = list[i];
list[i] = temp;
permute(list, low + 1, high);
temp = list[low];
list[low] = list[i];
list[i] = temp;
}
}
}
//打印斐波拉契數列前20項
public class FeibolaqiTest {
public int fblq(int n)
{
if(n==1||n==2)
{
return 1;
}else
{
return (fblq(n-1)+fblq(n-2));
}
}
public static void main(String[] args) {
FeibolaqiTest t=new FeibolaqiTest();
//int s=t.fblq(20);
for(int i=1;i<20;i++)
{
int num=t.fblq(i);
System.out.print(num+" ");
}
}
}
Java 使用遞歸函數的實例
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.