递归案例

一般定义

程序调用自身的编程技巧称为递归( recursion)。

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

注意:

(1) 递归就是在过程或函数里调用自身;

(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

C#递归算法实例:

计算数组{1,1,2,3,5,8.......} 第30位值,不用递归,我写出了以下这样的代码:

  1. static void Main(string[] args)

  2. ...{
  3. int[] num=new int[30];

  4. num[0]=1;

  5. num[1]=1;

  6. int first=num[0];

  7. int second=num[1];

  8. for (int i = 2; i < num.Length; i++)

  9. ...{

  10. num[i] = first + second;

  11. first = second;

  12. second = num[i];

  13. }

  14. Console.WriteLine(num[29]);

  15. Console.ReadLine();
  16. }

C#递归算法的使用,以下是代码:

  1. static void Main(string[] args)

  2. ...{
  3. Console.WriteLine(Process1(30));

  4. Console.ReadLine();

  5. }

  6. public static int Process1(int i)

  7. ...{
  8. //计算数组{1,1,2,3,5,8.......} 第30位值

  9. if (i == 0) return 0;

  10. if (i == 1) return 1;

  11. else

  12. return Process1(i - 1) + Process1(i - 2);

  13. }

// 阶乘

public class Factorial {

public static void main(String[] args) {

System.out.println(factorial(6));

}

public static int factorial(int n) {

// 出口点

if (1==n) {

return 1;

} else {

return n * factorial(n - 1);

}

}

}

// 斐波那契数列

public class Fibonacci {

public static void main(String[] args) {

System.out.println(fibonacci(6));

}

//  斐波那契数列:(从第三项开始,后一项都是前两项的和)

//
 1  1  2  3  5  8  13 ......

public static int fibonacci(int n) {

// 出口点

if (1==n || 2==n) {

return 1;

} else {

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

}

}

}

// 遍历一个目录下的所有文件

public class FileList {

private static List<String> fileNameList = new ArrayList<String>();

public static void main(String[] args) {

String dir = "D://360Rec";

File file = new File(dir);

addAll(file);

for (String name : fileNameList) {

System.out.println(name);

}

}

public static void addAll(File file) {

// 出口点: 是文件或者是空目录

if (file.isFile() || file.list().length==0) {

fileNameList.add(file.getName());

} else {

File [] files = file.listFiles();

for (File f : files) {

addAll(f);

if (f.isDirectory() && f.list().length!=0) {

fileNameList.add(f.getName());

}

}

}

}

}

时间: 2024-08-10 16:25:46

递归案例的相关文章

JS高级---递归案例

递归案例 递归案例: 求一个数字各个位数上的数字的和:  123   --->6 ---1+2+3 //递归案例:求一个数字各个位数上的数字的和: 123 --->6 ---1+2+3 function getEverySum(x) { if (x < 10) { return x; } //获取的是这个数字的个位数 return x % 10 + getEverySum(parseInt(x / 10)); } console.log(getEverySum(1364)); 递归案例:

数据结构之递归案例一

什么是递归? 顾名思义,所谓递归就是一个函数(或方法)自己调用自己,最简的如下: public void text() { text(); } 就是这么简单,但是一定要给这个递归函数一个出口,不然就会无限循环下去,最后的结果就是OutOfMemory(内存溢出),如果是在main函数中调用的话,就会出现栈空间已满的错误. 如何给一个递归的方法写一个出口呢? 只要在递归的过程中,有一个方法有一条return 语句,也就是有一个递归方法不再进行递归就会退出了. 我们给上方法添加一个返回的条件; pr

算法—递归案例—一段神奇的代码

public class test { public static void main(String[] args) { f(3,3); } public static void f(int n,int k){ if(n==0||k==0) return ; if(n>0){ f(n-1,k); System.out.println("n=="+n+" k=="+k); } if(k>0){ f(n,k-1); System.out.println(&q

JavaScript语言精粹4递归(汗诺塔游戏寻常解)及作用域

递归函数,就是直接或间接的调用自身的一种函数.把问题,分解成一组相似的子问题,每个问题都用一个一般的方式解决,即寻常解.即函数调用,自身,去解决自身子问题. 经典的递归案例,汗诺塔游戏 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Recursion递归</title> 6 <

递归与迭代_1 2016.4.21

迭代乃人工,递归方神通 To interate is human,to recurse,divine 一.定义 (1) 迭代 是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果 每一次对过程的重复称为一次"迭代",而每一次迭代得到的结果会作为下一次迭代的初始值 (2) ① 程序调用自身的编程技巧称为递归( recursion) 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量

函数-递归调用

一.什么是递归调用 递归调用:在函数调用过程中,直接或间接地调用了函数本身,这就是函数的递归调用1.递归的优点 递归函数的优点是定义简单,逻辑清晰.理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰. 使用递归函数需要注意防止栈溢出.在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧.由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出.可以试试fact(1000): 2.递归的缺点 解

“奇技淫巧” 话递归

“To Iterate is Human, to Recurs,Divine.” ---L. Peter Deutsch “迭代是人,递归是神” 第一次见有人这样说,让我受伤的心得到些许安慰...... 最近在琢磨算法,又见递归! 这是个绕不过去的坎! 当初,上大学时似懂非懂自欺欺人的蒙混过关,再次引证了那句名言:“出来混,迟早都是要还的......”.好吧,那就直面它!于是搜遍海内外,加上日思夜想,被这“奇技淫巧”折魔得真掉了不少头发(主要是8皇后问题~). 大神王垠在谈程序语言最精华的原理时

第10天:apply和call、bind、函数作为参数、返回值使用、闭包、递归的样例

apply和call apply和call都可以改变this的指向 函数的调用,改变this的指向 函数名字.apply(对象,[参数1,参数2,.....]) 方法名字.apply(对象,[参数1,参数2,.....]) 方法名字.call(对象,参数1,参数2,.....) 方法名字.call(对象,参数1,参数2,.....) 不同的地方:参数传递是方式不一样 只要是想使用别的对象的方法,并且希望这个方法是当前对象的,那么久可以使用apply或者call的方法改变this的指向 apply

六. python进阶(递归)

一 .递归 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 递归函数: 一个会调用自身的函数称为递归函数凡是循环能干的事情 递归都能干方式: 写出临界条件 我这一次和上一次的关系 假设当前函数已经能用 调用自身计算上一次结果 在求出本次的结果 必须有一个明确的结束条件:每次进入更深一层递归时,问题规模相比上次递归都应有所减少相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入).递归效率不高,递归层次过多会导致栈溢出(在计