zoukankan      html  css  js  c++  java
  • 帮助大家理解一下递归函数的返回值...

    如题:

    递归函数往往可以简化我们的代码,尤其是对树的遍历和利用回溯算法写代码的时候,但是递归函数的返回值往往是困扰我们的。

    总体来说,我们先要理解函数的调用过程,函数调用过程会用栈来保存函数的返回值和过程,而递归函数就是调用自身函数的过程,所以也是用栈存储,这样就比较容易理解了。

    下面一段代码可以帮助大家理解递归函数的返回值。

     1 package test;
     2 
     3 
     4 public class RecursionValueReturn {
     5 
     6     /*
     7      *目的: 
     8      * 递归返回值测试
     9      */
    10     
    11     int recurse(int i)
    12     {
    13         if(i == 0)
    14         {
    15             return 0;
    16         }
    17         else
    18         {
    19             i--;//i--必须放在前面,由于函数的中间结果值用栈保存,不然i--无法执行,会使递归函数对系统的栈用光
    20             recurse(i);
    21             //i--;
    22         }
    23         
    24         System.out.print(" "+ i);
    25         return i;
    26         
    27     }
    28     
    29     public static void main(String[] args) {
    30         // TODO Auto-generated method stub
    31         RecursionValueReturn result = new RecursionValueReturn();
    32         int value =  result.recurse(10);
    33         System.out.println();
    34         System.out.println("final return value " + value);
    35     }
    36 
    37 }

    下面是程序的输出结果截图.

    由输出和函数的返回结果可以看出,递归函数是用栈存储函数返回值和中间过程,每次返回栈顶的结果(包括中间的输出值和返回值),而递归函数最终的返回值的是栈底的值,也就是递归函数第一次调用时的返回值.

    下面是压入栈过程的示意图。

  • 相关阅读:
    springboot Quartz 定时任务工具类
    java 发邮件 代码
    spring boot 整合 shiro 权限框架
    java 读取xml
    flowable 报错 Waiting for changelog lock....
    微服务 springcloud Alibaba 阿里组件 项目源码
    Java 读取汉字拼音
    syslog how to
    c++ 字符串总结
    aptget 总结
  • 原文地址:https://www.cnblogs.com/daimadebanyungong/p/5052267.html
Copyright © 2011-2022 走看看