递归定义

除了调用其他方法,方法也可以调用自身方法。这就叫做递归

递归的例子:

int Factorial(int  _intvalue)

{

if(_intvalue<=0)

return _intvalue;

else

return _intvalue + Factorial(_intvalue-1);//调用Factorial本身

}

调用方法自身的机制和调用其它方法其实是完全一样的。每次方法调用都是把新的栈帧压入栈顶。

例如:

class   Program

{

public  void Count(int _intvalue)

{

if(_intvalue ==0)  return;

Count(_intvalue-1);

Console.WriteLine("{0}",_intvalue);

}

static void Main()

{

Program pr=new Program();

pr.Count(3);

}

}

在上述代码中,Count方法使用比输入值小于1的值调用自身然后打印输入的值。随着递归越来越深,栈也越来越大。

时间: 2024-12-12 08:45:36

递归定义的相关文章

阶乘的递归定义函数

1 def fact(n): 2 if n==0: 3 return 1 4 else: 5 return n*fact(n-1)

Learn Prolog Now 翻译 - 第三章 - 递归 - 第一节,递归的定义

在Prolog中,谓词可以递归地定义.简要地讲,一个谓词是递归定义的,如果一个或者多个规则的定义中包含了规则自身. 例子1:消化 考虑如下的知识库: is_digesting(X, Y) :- just_ate(X, Y). is_digesting(X, Y) :- just_ate(X, Z), is_digesting(Z, Y). just_ate(mosquito, blood(john)). just_ate(frog, mosquito). just_ate(stork, frog

C语言:递归小例子几则

递归定义: 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法. 递归条件: (1) 递归就是在过程或函数里调用自身: (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口. 利用递归可以使程序简化,减少代码的编写,下面请看例子. 1.取得十进制数的每一位并以字符的形式输出. #include<stdio.h> #include<stdlib.h> void binary_to_ascii(unsigned int value) { int num = v

图论 深度优先搜索 广度优先搜索的非递归实现

深度优先遍历 1.深度优先遍历的递归定义 假设给定图G的初态是所有顶点均未曾访问过.在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过:然后依次从v出发搜索v的每个邻接点w.若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止.若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中所有顶点均已被访问为止. 图的深度优先遍历类似于树的

二叉树的非递归遍历--京东2015笔试回忆

题目回忆: C/C++研发试卷:偏重于数据结构的考察,编程题有2题+1题附加题: 1.输入整数n,求m,m>9,m中各个数位的乘积=n的最小整数;如n=36,m=49; 2.二叉树前序遍历的非递归实现(本文的总结) 3.求第n个数,这个序列满足(2^i)*(3^j)*(5^k),前7个为:2,3,4,5,6,8,10 .... 小题有基本的数据结构.程序运行结果.SQL题目. 4.删除表格用DROP命令,死锁产生的条件: 4.1互斥使用(资源独占) 一个资源每次只能给一个进程使用 4.2.不可强

尾递归和线性递归

1.递归的定义 函数直接或间接的调用自己 使用递归时,必须有明确的结束递归的条件 2.递归的适用场合 数据的定义按照递归定义(比如求n!) 问题的解法适用于使用递归 数据的结构是按递归定义的(比如二叉树) 3.线性递归 也就是普通递归,下一次递归数据的计算要依赖于上一次递归的结果和参数,当数据量较小时执行效率与尾递归几乎没区别,但当数据量较大,迭代次数较多时,由于每次递推都要在内存中开辟一个栈空间,用来存储上次递推的结果和参数,这样的算法将导致严重的内存开销,甚至造成内存溢出,抛出java.la

java基础:递归应用---遍历文件目录

一:递归相关知识 程序调用自身的编程技巧称为递归( recursion). 一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量.递归的能力在于用有限的语句来定义对象的无限集合.用递归思想写出的程序往往十分简洁易懂. 一般来说,递归需要有边界条件.递归前进段和递归返回段.当边界条件不满足时,递归前进:当边界条件满足时,递归返回

Fibonacii非递归

记得在我们最开始学习C语言的时候,每当讲到递归,无论是课本上,还是老师,都会给出两个经典例子的递归实现,其中一个就是阶乘,另外一个就是Fibonacci(中文多译成斐波那契)数列了. 用递归方法计算阶乘的代码如下: //递归计算阶乘 long Factorial(int n) {     if (n <= 0)     {         return 1;     } return n * Factorial(n - 1); } 这样的递归是一个很明显的尾部递归的例子,所谓的尾部递归(tail

递归与迭代【转】

1 递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己. 一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合. 1.1 使用递归要注意的有两点: 1)递归就是在过程或函数里面调用自身: 2)在使用递归时,必须有一个明确的递归结束条件,称为递归出口. 1.2 递归分为两个阶段: 1)递推:把复杂的问题的求解推到比原问题简单一些的问题的求解: 2