递归和非递归

学习目标:了解递归与非递归

提示:这里可以添加学习目标
例如:一周掌握 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 个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值