递归函数之JAVA演绎
1、递归函数的定义:
答:递归函数即自调用函数,在函数体内直接或间接的调用自己,即函数的嵌套是函数本身。
2、递归方式:递归调用有直接递归和间接递归两种方式。
A:直接递归:在函数中出现调用函数本身。
示例1:下面代码求斐波那契数列第n项,斐波那契数列第一和第二项是1,后面每一项是前两项之和,即1、1、2、3、5、8、13 ...。
程序代码:
public class Test {
public static void main(String args[]) {
int x1 = 1;
int sum = 0;
int n = 7;
for (int i = 1; i <= n; i++) {
x1 = func(i);
sum = sum + x1;
}
System.out.println("sum=" + sum);
}
public static int func(int x) {
if (x > 2)
return (func(x - 1) + func(x - 2));
else
return 1;
}
}
B:间接递归:指函数中调用了其他函数,而该其他函数有调用了本函数。
示例2:用间接递归来计算上述斐波那契数列。
程序代码:
public class Test {
public static void main(String args[]) {
int x1 = 1;
int sum = 0;
int n = 7;
for (int i = 1; i <= n; i++) {
x1 = func1(i);
sum = sum + x1;
}
System.out.println("sum=" + sum);
}
public static int func1(int a){
int b;
b=func2(a);
return b;
}
public static int func2(int b) {
if (b> 2)
return (func1(b - 1) + func1(b - 2));
else
return 1;
}
}
3、为什么要用递归函数?递归函数的缺点是什么?
答:递归的目的是简化程序设计,使程序易读。
示例3:下面不用递归函数继续来计算上述斐波那契数列。
程序代码:
public class Test {
public static void main(String args[]) {
int n=7;
int a=1, b=1, temp;
int sum=2;
for(int i=3; i<=n; i++){
temp=a+b; a=b; b=temp;
sum=sum+temp;
}
System.out.println("sum=" + sum);
}
}
从上面例子我们可以发现虽然非递归函数效率高,但较难编程,可读性较差。递归函数的缺点是增加了系统开销,也就是说,每递归一次,栈内存就多占用一截。
4、递归的条件:
答:需有完成任务的语句,需满足递归的要求(减小而不是发散)。
5、递归进阶:
示例4:
编程求解:若一头小母牛,从出生起第四个年头开始每年生一头母牛,按次规律,第n年时有多少头母牛?
程序代码:
public class Test3 {
public static void main(String args[]) {
int n=10; //要查看的年数
System.out.println("共有"+cattle(n)+"头小母牛!");
}
public static int cattle(int n){
if(n<=0)
return 0;
if(n<=3)
return 1;
return cattle(n-1)+ cattle(n-3);//此处是递归要好好理解。
}
}
规律:此类问题的递归函数为:
如果要求的是从出生起第四个年头,则递归函数为cattle(n-1)+ cattle(n-3),
如果要求的是从出生起第五个年头,则递归函数为cattle(n-1)+ cattle(n-4),
。。。。
依次类推。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lxgljj/archive/2004/10/21/145147.aspx
分享到:
相关推荐
C通过运行时堆栈支持递归函数的实现。递归函数就是直接或间接调用自身的函数。 许多教科书都把计算机阶乘和菲波那契数列用来说明递归,非常不幸我们可爱的著名的老潭老师的《C语言程序设计》一书中就是从阶乘的计算...
Oracle 递归函数介绍 Oracle 递归函数是一种特殊的PL/SQL函数,可以用于解决复杂的树形结构查询问题。递归函数可以自我调用,以便遍历树形结构的每个节点,直到达到停止条件。 在 Oracle 中,递归函数的定义语法...
递归函数是实现递归思想的一种方式,通常在函数内部调用自身来解决复杂问题。本节将深入探讨递归思想和递归函数的概念,并通过几个具体的Python示例来阐述其工作原理和应用。 首先,理解递归的关键在于明确两个核心...
在编程领域,递归函数是一种基于函数自我调用来解决问题的策略。在Python中,递归函数的定义简单,逻辑清晰,使得复杂问题的解决变得直观。递归函数的关键在于每个递归调用都必须向基本情况靠近,即最终会达到一个不...
在编程领域,递归函数是一种基于自我调用的函数设计技术,它在处理特定问题时,尤其是涉及到数据结构如树和图的操作时,显得尤为重要。本压缩包包含8个递归函数的例子,覆盖了多种递归应用,让我们逐一探讨这些递归...
总结一下,通过使用数据结构中的栈,我们可以将效率较低的递归函数转换为非递归函数,提高计算效率,减少内存消耗,防止堆栈溢出。在实际编程中,尤其是在处理大数据量或需要高效运行的算法时,这样的优化是非常重要...
递归函数是计算机科学中的一种基础概念,它的基本思想是函数直接或间接地调用自身。在上述内容中,首先展示了一个简单递归函数的示例,然后又通过添加辅助函数进行了尾递归优化。 在简单递归函数的示例中,定义了一...
本教程“嵌入式C语言培训-C编程基础-递归函数视频教程”聚焦于C语言的一个关键特性——递归函数。递归是编程中的一个强大工具,能够简化复杂问题的解决方案,但它也需要程序员有深入的理解才能正确使用。 递归函数...
在编程领域,递归函数是一种强大的工具,它通过自身调用来解决复杂问题。递归的基本原理是将大问题分解为相同或相似的小问题,并通过解决这些小问题来达到解决整个问题的目的。本主题关注的是如何计算递归函数的调用...
Delphi,作为一款流行的Object Pascal编程环境,同样支持递归函数的使用。本篇文章将详细探讨Delphi中的递归函数及其应用。 首先,我们要理解递归的基本概念。递归是指一个函数或过程通过调用自身来完成任务。这种...
利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
在“c++递归函数基本代码.zip”压缩包中,可能包含了若干个示例,用于展示如何在C++中实现递归。 首先,理解递归的基本原理至关重要。递归函数必须满足两个条件:一是存在基本情况(base case),即问题可以直接...
省市县递归函数
在编程领域,递归函数是一种强大的工具,它通过调用自身来解决问题或执行任务。VB6.0(Visual Basic 6.0)虽然是一款较老的编程环境,但仍然广泛用于教学和某些遗留系统的维护。本教程将通过两个具体的例子深入讲解...
由原始递归函数经过合成或原始递归得到的函数仍是原始递归函数.
二是理解和调试递归函数可能较为困难,因为它们涉及的逻辑通常比非递归函数更为抽象。因此,在实际编程中,我们需要权衡递归的优点和缺点,选择最适合问题的解决方案。 总结来说,递归是计算机科学中的一个重要概念...
使用环境:需要先安装PyCharm(请自己百度下载安装),以及然后官网上下载Python 2.7版本,以及Python 3.7版本后,安装在自己的电脑上。 使用步骤: ...目的:帮助理解递归函数在Python中的具体使用。
在这个场景中,我们采用了一种称为“回溯法”的策略,配合递归函数来找到从起点到终点的有效路径。本文将深入探讨回溯法的概念,递归函数的应用,以及如何将两者结合解决迷宫问题。 首先,理解回溯法是关键。回溯法...
C语言递归函数设计,如何使用递归函数进行算法计算,这样可以提高程序的质量
Python 递归函数 如果一个函数体直接或者间接调用自己,那么这个函数就称为递归函数.也就是说,递归函数体的执行过程中可能会返回去再次调用该函数.在python里,递归函数不需要任何特殊的语法,但是它需要...