JAVA菜鸟入门篇 - 方法定义、递归结构(六)

1、方法定义


 Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,声明格式为:

         [修饰符1  修饰符2  …..] 返回值类型  方法名( 形式参数列表 ){

                   Java 语句;… … …

}


语法解释:


  1. 形式参数:在方法被调用时用于接收外界输入的数据。
  2. 实参:调用方法时实际传给方法的数据。
  3. 返回值:方法在执行完毕后返回给调用它的环境的数据。
  4. 返回值类型:事先约定的返回值的数据类型,无返回值,必须给出返回类型viod。
    1. Java语言中使用下述形式调用方法:对象名.方法名(实参列表)
    2. 实参的数目、数据类型和次序必须和所调用方法声明的形式列表匹配。
    3. return语句中止方法的运行并指定要返回的数据。
 

Java中进行函数调用中传递参数时,遵循传递的原则:

基本类型传递的是该数据本身,引用类型传递的是对象的引用,不是对象本身


设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。最好就是一个方法完成一个功能,这样利于我们后期的扩展。


2、递归结构


递归(recursion)是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想是:“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。


递归结构包括两个部分:
- 定义递归头 解答:什么时候不调用自身方法,否则会陷入死循环
- 递归体 解答:什么时候需要调用自身方法

==========================


//程序:实现阶乘<span style="font-family: verdana, arial, helvetica, sans-serif;">factorial</span>

<span style="white-space:pre">	</span>public static long factorial(int n){
		if(n==1){
			return 1;
		}else{
			return n*factorial(n-1);  
		}
	}
	
	public static void main(String[] args) {
		test01();
		System.out.println(factorial(10));  
	}


==========================


递归算法


递归算法是一种直接或者间接调用自身函数或者方法的算法。Java递归算法是基于Java语言实现的递归算法。

   递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。 


   递归算法解决问题的特点:
   1)递归就是方法里调用自身。
 2) 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。否则会抛出StackOverflowError异常。
 3)递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
 4)在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出(StackOverflowError异常)等,所以一般不提倡用递归算法设计程序。


 递归算法所体现的“重复”一般有三个要求:
 一是每次调用在规模上都有所缩小(通常是减半);
 二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);
 三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。


如何设计递归算法
1
)、确定递归公式
2
)、确定边界(终了)条件

    为了理解递归算法,现举一个实例说明如下:

    问题描述:求解Fibonacci数列的第10个位置的值?(斐波纳契数列(Fibonacci Sequence),又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*))

===========================================

<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 方法描述:求解Fibonacci数列的递归算法
<span style="white-space:pre">	</span> * 输入参数: int input
<span style="white-space:pre">	</span> * 返回:Fibonacci数列第input个数
<span style="white-space:pre">	</span> * 
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private static int fibonacci(int input){
<span style="white-space:pre">		</span>if(input==1 || input ==2){
<span style="white-space:pre">			</span>return 1;
<span style="white-space:pre">		</span>}else{
<span style="white-space:pre">			</span>return fibonacci(input-1)+fibonacci(input-2);
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public static void main(String[] args) {
<span style="white-space:pre">		</span>System.out.println(fibonacci(5)); //返回Fibonacci数列第5个数
<span style="white-space:pre">	</span>}

显示结果:5

===========================================

总结:

    1)递归算法,简而言之,就是方法直接或间接地调用自身。

    2)递归算法必须有一个明确的递归结束条件,即递归出口。

    3)递归算法简洁明了,但是效率不高。


本文参考: http://blog.csdn.net/wangloveall/article/details/7932704
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值