zoukankan      html  css  js  c++  java
  • 【数据结构】递归调用学习

     在回顾数据结构的时候,重新学习了一下对递归的使用,希望对您有帮助。

    package com.qxlx;
    /**
     * 循环改递归
     * 	改为递归的关键是发现逻辑 相似性
     * 不要忘记递归出口
     * 构造相似性
     *    如果没有明显的相似性,,需要主动构造
     * 		不能相似的原意很可能是缺少参数
     * 		递归与数学上的的递推公式和类似
     * @author jia
     * 
     *
     */
    public class A {
    	/**
    	 * 	f(9)
    	 * 		f(8)
    	 * 			f(7)
    	 * 				f(6)
    	 * 					f(5)
    	 * 						f(4)
    	 * 							f(3)
    	 * 								f(2)
    	 * 									f(1)
    	 * 										f(0)
    	 * 										
    	 * 										  0
    	 * 									1
    	 * 								 2
    	 * 						     3
    	 * 						 4
    	 * 					  5
    	 * 				  6
    	 * 			  7	
    	 * 	 	  8
    	 * 	  9
    	 * 
    	 * 对递归的理解
    	 *  程序的需求是通过使用递归,打印出0-9之间的数字
    	 *  但是我们传递的参数是9,为什么先打印出的是0 然后 1 2 3 4这样的顺序的
    	 *  	原因就是在调用程序的时候,f(9)的时候,会递归调用f(8)。而此时f(9) 应该打印的值 9 会被存储到一个临时栈中
    	 *  栈的特点就是先进后出,f(8)调用f(7),以此类推,就会到达程序的基值,当f(0)时,就会返回 0 
    	 *  此时栈中从栈顶到栈尾的顺序就是 0123456789.根据栈 弹栈的特点,后近先出,所以在屏幕上就会依次打印出0---9之间的数字了、
    	 *  总结:递归调用无非就是将临时值,先存储到栈中。程序到达基值的时候,就会有从栈中取出这些值、
    	 * @param n
    	 */
    	public static void f(int n){
    		//递归出口是 当n=0 的时候就会跳出循环
    		if(n>0) 
    			f(n-1);
    		System.out.print(n);
    	}
    	public static void main(String[] args) {
    		f(9);
    	}
    	
    	/**
    	 * 打印0到9之间的数字
    	 * @param start
    	 * @param end
    	 */
    	public  static void f2(int start,int end){
    		//此时应该添加一个出口 
    		if(start>end)
    			return;
    		System.out.println("打印的数字是:"+start);//打印出 
    		f2(start+1,end);
    	}
    }
    
  • 相关阅读:
    C++的精髓——代码复用、接口复用
    静态库和动态库的区别和win平台和linux平台代码实现
    windows工程总结
    预编译头文件stdafx.h-stdafx.cpp-stdafx.pch(pre-compile headfile)
    linux调用库的方式
    Window 32位 编程总结
    读Zepto源码之内部方法
    读Zepto源码之代码结构
    再谈 javascript 数组去重
    把axios封装为vue插件使用
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860916.html
Copyright © 2011-2022 走看看