package com.lw.list;
/***
* f(n)=n+f(n-1)
* @author liwei
*
*/
public class 递归Test {
/***
* 方法一
* 递归方法DecimalToBinary,把一个十进制数转换成二进制数
* @param num
*/
public void DecimalToBinary(int num) {
if (num == 0) { // 当num=0时,循环结束
return;
} else {
DecimalToBinary(num / 2); // 调用递归方法
System.out.print(num % 2);
}
}
/***
* 方法二
* 递归方法DecimalToBinary1,把一个十进制数转换成二进制数
* @param num
* @return
*/
public String DecimalToBinary1(int num) {
if (num == 0) { // 当num=0时,循环结束
return "";
} else {
return DecimalToBinary1(num / 2) + Integer.toString(num % 2); // 调用递归方法
}
}
/***
* 阶乘
* 1*2*3*4....n
* @param num
* @return
*/
public int jiecheng(int num) {
if(num==1) {
return 1;
} else {
return num * jiecheng(num - 1);
}
}
/***
* 叠加
* 1,2,3...100 依次相加的结果
* @param num
* @return
*/
public int sum(int num) {
if (num > 0) {
return num + sum(num - 1);
} else {
return 0;
}
}
/***
* 斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……
* 这个数列从第三项开始,每一项都等于前两项之和。
* @param n
* @return
*/
public int fib(int n) {
if (n == 0)
return 0;
if (n == 1)
return 1;
if (n > 1)
return fib(n - 1) + fib(n - 2);
return 0;
}
/***
* 两个数字的最大公约数
* @param num1
* @param num2
*/
public void yueshu(int num1, int num2) {
if (num1 == num2) {
System.out.println(num1); // num1=num2时,结束
} else {
yueshu(abs(num1 - num2), min(num1, num2)); // 调用递归方法
}
}
// 求两个数绝对值
private int abs(int num) { return num > 0 ? num : -num; }
// 求两个数较小者
private int min(int num1, int num2) { return num1 > num2 ? num2 : num1; }
public static void main(String[] args) {
递归Test t = new 递归Test();
// 1,2,3...100 依次相加的结果
System.out.println(t.sum(100));
// 1*2*3*4...*n
System.out.println(t.jiecheng(5));
// 两个数字的最大公约数
t.yueshu(13, 8);
System.out.println(t.fib(4));
// 十进制数转换成二进制数
t.DecimalToBinary(9);
System.out.println();
System.out.println(t.DecimalToBinary1(8));
}
}