java 递归函数

一、递归函数,通俗的说就是函数本身自己调用自己...

如:n!=n(n-1)!

你定义函数f(n)=nf(n-1)

而f(n-1)又是这个定义的函数。。这就是递归

二、为什么要用递归:递归的目的是简化程序设计,使程序易读

三、递归的弊端:尽管非递归函数效率高,但较难编程,可读性较差。递归函数的缺点是添加了系统开销,也就是说,每递归一次,栈内存就多占用一截

四、递归的条件:需有完毕任务的语句,需满足递归的要求(减小而不是发散)

五、递归进阶:

1.用递归算n的阶乘:

分析:n!=n*(n-1)*(n-2)...*1

public int dReturn(int n){

if(n==1){

return 1;

}else{

return n*dReturn(n-1);

}

}

2.用递归函数算出1到n的累加:1+2+3+4+..+n

public int dReturn(int n){

if(n==1){

return 1;

}else{

return n+dReturn(n-1);

}

}

3.要求输出一个序列:1,1,2,3,5,8,11......(每个数为前两个数子之和,要求用递归函数)

用java递归来表示一个函数:F(n)=F(n-1)+F(n-2);F(0)=1;F(1)=1;

分析:X1=1; X2=1; X3=X1+X2; X4=X2+X3; ... ; Xn=X(n-1)+X(n-2)

public int F(int n){

if(n==1){

return 1;

}else if(n==2){

return 1;

}else{

return F(n-1)+F(n-2);

}

}

4.java用递归方法反向打印一个整数数组中的各个元素

public static void  printAll(int index,int[] arr){

System.out.println(arr[index]);

if(index > 0){

printAll(--index,arr);

}

}

public static void main(String[] args){

int[] arr={1,2,3,4,5};

printAll(arr.lenth-1,arr);

}

5.编程求解:若一头小母牛,从出生起第四个年头開始每年生一头母牛,按次规律,第 n 年时有多少头母牛?

public static int cattle(int n){

if(n<=0){

return 0;

}else if(n<=3){

return 1;

}else{

return cattle(n-1)+cattle(n-3);

}

}

public static void main(String[] args){

int n=10;

System.out.println(n+"年后共同拥有"+cattle(n)+"头牛");

}

递归、线性递归、尾递归的概念?

时间: 2024-10-06 14:13:31

java 递归函数的相关文章

Java/For循环/递归函数循环

首先:java的重点和难点,命名和缓存 这次咱们的内容主要用到: 命名规则:大小写字母,下划线,美元符号$,数字,且数字不能打头 变量的声明:数据类型划分内存空间,命名,赋值 方法的声明:修饰符列表,返回值,方法名,形参列表,方法体 示例: 1, 如果让你计算1~100的奇数和,偶数和,还有1~100的和; 2, 还有1~N的和 3, 九九乘法表 第一题,1~100的奇数和,偶数和,和 先用for循环写一个 for循环,for循环的运行规则,for(表达式1,表达式2,表达式3),先执行表达式1

201301 JAVA题目0-1级

题目描述 编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回true:不满足时返回false. 输入描述: 第一行是数据个数,第二行是输入的数据 输出描述: 返回true或者false 输入例子: 4 1 5 -5 1 输出例子: true 1 import java.util.*; 2 3 public class Main46 { 4 public

使用JAVA直观感受快速排序与冒泡排序的性能差异

初学算法,肯定会编写排序算法 其中两个最为有名的就是冒泡排序和快速排序 理论上冒泡排序的时间复杂度为O(N^2),快速排序的时间复杂度为O(NlogN) 下面本门使用JAVA,分别编写三段排序程序 对十万个0-9999的整数进行一次冒泡排序 对十万个0-9999的整数进行1000次快速排序,使用递归完成 对十万个0-9999的整数进行1000次快速排序,使用堆栈完成 对十万个0-9999的整数进行一次冒泡排序: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

Scala学习笔记及与Java不同之处总结-从Java开发者角度

Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续更新一些切换后在开发过程中值得注意的地方.以下列举了部分,但令人印象深刻的Scala语言的不同之处,具体的代码演示样例及具体阐述见下文. ? Scala中可直接调用Java代码,与Java无缝连接. 语句能够不用";"结束.且推荐不适用";". 变量声明时以var或va

Java数据结构-线性表之栈的应用-递归及其应用

??递归函数的定义:把一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称做递归函数(递归函数必须有一个结束的条件,以免陷入无穷尽的递归中). 迭代和递归的区别是: ?(1).迭代使用的是循环结构,递归使用的是选择结构. ?(2).递归能使程序的结构更清晰.更简洁.更容易让人理解,从而减少读懂代码的时间.但是大量的递归调用会建立函数的副本,会耗费大量的时间和内存. ?(3).迭代则不需要反复调用函数和占用额外的内存.因此我们应该视不同情况选择不同的代码实现方式. 下面解释一下怎么使用栈

java锁的种类以及辨析(转载)

java锁的种类以及辨析(一):自旋锁 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) .这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及.本系列文章将分析JAVA下常见的锁名称以及特性,为大家答疑解惑. 1.自旋锁 自旋锁是采用让当前线程不停地的在循环体内执行实现的,当循环的条件被其他线程改变时 才能进入临界区.如下 01 public class SpinLock { 02  

Java小程序(二)

4. 用Java语言输出斐波那契数列的前20项元素: (1). 使用数组方法实现斐波那契数列的输出,代码如下: 1 public class Demo { 2 public static void main(String args[]){ 3 4 int arr[]=new int [20]; 5 arr[0]=1; 6 arr[1]=1; 7 System.out.print(arr[0]+" "); 8 System.out.print(arr[1]+" ");

java函数方法

1.方法重载 (1)源代码 // MethodOverload.java // Using overloaded methods public class MethodOverload { public static void main(String[] args) { System.out.println("The square of integer 7 is " + square(7)); System.out.println("\nThe square of doubl

JAVA中方法的定义与使用(课堂学习归纳)

组合数,百度词条是这样解释的:从m个不同元素中取出n(n≤m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数(Combination) 对于计算组合数,需要一定的工作量,计算机可以很好的帮助我们机选组合数,下面总结3种Jav计算组合数的方法: 一: 源代码如下: package bky_1; import javax.swing.JOptionPane; public class zuheshu { public static int factorial(int x) { if