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 }

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

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

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

  • 相关阅读:
    spring mvc EL ModelAndView的 Model 值 在jsp中不显示
    maven修改本地仓库,远程仓库与中央仓库
    Maven 手动添加 JAR 包到本地仓库
    Maven项目的结构分析
    Maven 构建配置文件
    SVN使用出现的问题及解决方案
    Eclipse中SVN的安装步骤(两种)和使用方法
    Eclipse SVN 使用教程
    svn使用教程总结
    eclipse下配置安装ssm图文教程(web版)
  • 原文地址:https://www.cnblogs.com/daimadebanyungong/p/5052267.html
Copyright © 2011-2022 走看看