学习目标:了解递归与非递归
提示:这里可以添加学习目标
例如:一周掌握 Java 入门知识
学习内容:
递归在编写的时候可以先将这个方法看作已经具有了所希望的功能,然后再编写 这样思维比较清晰,更容易理解递归
package com;
import org.omg.CORBA.PUBLIC_MEMBER;
public class day_05 {
//主体
public static void main(String[] args){
printing(1234);
System.out.println(num(12));
System.out.println(fib(3));
}//main
//输出各位上的数
public static void printing(int i){
System.out.println(i);
if (i>9){
printing(i/10);
System.out.println(i%10+" ");
}
}//printing
//计算各位上的数的和
public static int num(int i) {
if (i>9){
int a=i%10;
return a + num(i/10);
}
return i;
}//num
//斐波那契数列非递归
public static int fib(int n) {
if (n1||n2) return 1;
else{
int i ;
int sum1=1;
int sum2=1;
int sum3 = 0;
for(i=3;i<=n;++i){
sum3=sum1+sum2;
sum1=sum2;
sum2=sum3;
}
return sum3;
}
}//fib
}//最后一个大括号
给定一个数,输出其在斐波那契数列上的位数,比较复杂,其思想大概是
如果给定的数是1,那么返回1,如果不是1,就从2开始再n++,让fib1和fib2一直加直到比an大就停止,同时n++也停止,此时如果an=fib1+fib2
那么这个数就是斐波那契数列里的数 返回n+1,否则返回-1(斐波那契数列里不存在),算法的难点在如何终止,想明白何时终止就比较好理解了
package com;
public class fib {
public static void main(String[] args) {
System.out.println(fib_1(1));
}
public static int fib_1(int an) {
int n=2;//位置 如果不是输入1 则从第二个位置开始
int fib1=1;
int fib2=1;
int lin=0;//临时变量
//如果输入的是1 ,则分别是第一位和第二位
if(an==1) {
return 1;
}
//将fib1 + fib2 一直执行到 fibNumebr 前
while(true) {
//如果 不是斐波那契数列 则返回位-1
if((fib1+fib2) >= an) {
break;
}
else {
lin = fib2;
fib2 = fib2 + fib1;
fib1 = lin;
}
n++;//与前面的n是一对 从2开始
}
//相等返回n+1 不相等返回-1
if((fib1+fib2)==an) {
return n+1;
}else {
return -1;
}
}
}
提示:这里可以添加要学的内容
例如:
1、 搭建 Java 开发环境
2、 掌握 Java 基本语法
3、 掌握条件语句
4、 掌握循环语句
学习时间:
提示:这里可以添加计划学习的时间
例如:
1、 周一至周五晚上 7 点—晚上9点
2、 周六上午 9 点-上午 11 点
3、 周日下午 3 点-下午 6 点
学习产出:
提示:这里统计学习计划的总量
例如:
1、 技术笔记 2 遍
2、CSDN 技术博客 3 篇
3、 学习的 vlog 视频 1 个