package Day06;
/**
- 1、实现代码:按顺序打印一个数字的每一位(例如1234 打印出1 2 3 4)
- 2、实现代码:写一个递归方法,输入一个非负整数,返回组成它的数字之和.
-
- 使用for实现斐波那契数列 传入位数 ,求 第n位的值
-
- 传入一个值,判断该值在斐波那契数列的第几位上,如果没有就返回-1,如果有就返回位数
- @author 10099
*/
public class digui_fabanacci {
public static void main(String[] args) {
m1(1234);// 调用m1
System.out.println(m2(1234));// 调用m2并输出
m3(64);
System.out.println(m4(8));
System.out.println(m5(64));
}
// 1.实现代码:按顺序打印一个数字的每一位(例如1234 打印出1 2 3 4)
// 思路 深入最后 依次弹栈
// System.out.println(num/10/10/10%10);
// System.out.println(num/10/10%10);
// System.out.println(num/10%10);
// System.out.println(num%10);
public static void m1(int num) {
if (num > 9) {
m1(num / 10);
}
System.out.println(num % 10);
}
// 2.实现代码:写一个递归方法,输入一个非负整数,返回组成它的数字之和.
// 思路123%10+123/10%10+123/10/10%10 int返回整数类型
public static int m2(int num) {
if (num < 10) {
return num;
}
return num % 10 + m2(num / 10);
// 再用方法加上递归输出其余的数字
}
// .3. 使用for实现斐波那契数列 传入位数 ,求 第n位的值
public static void m3(int n) {
if (n < 1) {
System.out.println("位数不正确");
return;
}
if (n == 1 || n == 2) {
System.out.println(1);
return;
}
// 当包含三位及以上的位数
long a = 1;// 默认表示第一位
long b = 1;// 默认表示第二位
long c = 1;// 默认表示第三位
for (int i = 3; i <= n; i++) {
c = a + b;
a = b; // 用a表示(n-2)
b = c; // 用b表示(n-1)
}
System.out.println(c);
}
// 4. 传入一个值,判断该值在斐波那契数列的第几位上,
// 如果没有就返回-1,如果有就返回位数
public static int m4(int num) {
if (num < 1) {
return -1;
}
if (num == 1) {
return 1;
}
for (int i = 3; true; i++) {
long value = m5(i);// 调用下面的m5函数得到斐波那契数列的第i个值进行比较
if (num == value) {
return i;
} else if (num < value) {// 如果小于第i个值对应的斐波那契数列 就停止
return -1;
}
}
}
// 这里的m5跟m3返回值类型不一样
// 若返回值类型为void 可直接调用函数 m3(64)得到第64位;
// 若为int 或long要用 System.out.println(m5(64))输出得到64位;
public static long m5(long n) {
if (n < 1) {
System.out.println("位数不正确");
return -1;
}
if (n == 1 || n == 2) {
System.out.println(1);
return -1;
}
// 当包含三位及以上的位数
long a = 1;// 默认表示第一位
long b = 1;// 默认表示第二位
long c = 1;// 默认表示第三位
for (int i = 3; i <= n; i++) {
c = a + b;
a = b; // 用a表示(n-2)
b = c; // 用b表示(n-1)
}
return c;
}
}