zoukankan      html  css  js  c++  java
  • 栈的应用---递归

    递归

    栈有一个很重要的应用:在程序设计语言中实现了递归。那什么是递归呢?

    当你往镜子前面一站,镜子里面有你一个像。那如果两面镜子一起照呢?那么两面镜子里面都会产生千千万个就会产生你,这就产生了递归现象。

    就像上面这张专辑图片的左上角一样。

    递归的一个典型例子

    斐波那契数列的实现 -- 

    那什么是斐波那契数列呢 ??

    看这一个数列:

    下标 1 2 3 4 5 6 7 8 9 0
    1 1 2 3 5 8 13 21 34 55

    可以看出:数列的前面相邻两项之和,构成下一项,这是就是那什么是斐波那契数列。

    我们采用两种方法实现打印前20位斐波那契数列的列数- -迭代+递归

    迭代

     1          int i;
     2          int array[] = new int[20];
     3          array[0] = 1;
     4          array[1] = 1;
     5          System.out.print(array[0] + " " + array[1] + " ");
     6         
     7          for (i = 2; i < 20; i++) {
     8          array[i] = array[i - 1] + array[i - 2];
     9          System.out.print(array[i] + " ");
    10          }

    递归:

            int i;
            for (i = 0; i < 20; i++)
                System.out.println(Fbi(i));
    
        static int Fbi(int i) {
            if (i < 2)
                return 1;
            return Fbi(i - 1) + Fbi(i - 2); // 这里Fbi函数就是自己,它在调用自己
        }

    递归和迭代的区别:

    1、迭代使用的是循环结构,递归是循环结构。

    2、递归能使程序的结构更加清晰,更简洁,更容易让人理解,从而减少读代码的时间。

    3、但是大量的递归调用会建立函数副本,会耗费大量的时间和内存。

    4、迭代则不需要反复的调用函数和占用额外的内存,因此我们应该视不同情况使用不同的实现方式。

    再补充一个栈的其他应用(进制转换)

    如10进制转换成8进制,除8求余,并且余数进栈。

    出栈的元素即是8进制数。

     1 public static void conversion(int n) {
     2         LinkStack stack = new LinkStack();
     3         while (n != 0) {
     4             stack.PushStack(stack, n);
     5             n /= 8;
     6         }
     7 
     8         while (!stack.ElemptyStack(stack)) {
     9             stack.PopStack(stack);
    10         }
    11     }

    完毕 - -

  • 相关阅读:
    Navicat Premium 12安装及破解(四)
    ajax原理及应用(十六)
    为什么每次下载后必须关闭掉IO流(十五)
    FormData提交文件(十四)
    代理设计模式(三)
    单例模式(二)
    工厂模式(一)
    集采用的验证规则
    java泛型的理解
    spring中如何直接注入session和request对像
  • 原文地址:https://www.cnblogs.com/liuzeyu12a/p/10308450.html
Copyright © 2011-2022 走看看