A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhouguizhi 黑马帝   /  2011-9-29 03:27  /  2667 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一直都不理解递归是怎么样的  希望有高手指点  最好附加代码演示

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

9 个回复

倒序浏览
黑马网友  发表于 2011-9-29 03:32:58
沙发

我曾经遇到的面试问题

、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
z这个问题我第一次面试的时候不会 随便答了一下  回来百度了一下  但还是不知道具体的原因是什么?
往高手指点!

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-29 03:38:19
藤椅

关于网络传输问题

如果 客户端向服务器端发送数据,如果客户端由于某个原因网络中断了 那么第二次上传怎么继续从断点的位置继续上传!  这个在android中也有这个问题 比过网络信号不好  或者没电了

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-29 03:41:04
板凳

一个android问题

这个面试题也是我面试常见的笔试题目!
就是手机屏幕切换,调用了activity生命周期中那些方法!

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-29 08:17:29
报纸

回复 楼主 的帖子

递归其实就是在方法中间接或直接调用自身方法:
其形式如下:
public static void digui(int a ){
      digui(a-1);
}
代码实例:
打印这样一个金字塔 塔高由方法参数决定
n    n    n    n     n……n
……
3    3     3
2    2
1[code]public class printtest{

    public static void main(Stirng() args){
   
    }
   
    public static void tes(int n){
      if (n <= 0 )
      return;
      
      for (int i = 0; i < n ; i++){
        System.out.print(" "+n);
      }   
        System.out.println();
        tes(n - 1);    //打印完一行以后将数字减一,重复调用,直到n<=0终止本方法
    }
}[/code]

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-29 08:35:14
地板
第二个问题:[code]public class TEST {
        public static void main(String[] args) {
       
         try {
                System.out.println("return前");
                        return;
                       
                } catch (Exception e) {
                       
                }
                finally{
                        System.out.println("finally");
                }
         
        }
}[/code]输出结果:
return 前
finally
在try / catch/ finally 中finally是始终都需要被执行的代码
如果有异常那么:
先try 后catch 最后finally
如果无异常:
先try后直接finally

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-29 08:43:10
7#
/**
* 概念介绍:
* 递归是一种方法(函数)调用自已编程技术。
* 递归就是程序设计中的数学归纳法。
* 例如:tri(n)=1            if n=1
*     tri(n)=n+tri(n-1)    if n>1
* 可能while循环方法执行的速度比递归方法快,但是为什么采用递归呢。
* 采用递归,是因为它从概念上简化了问题,而不是因为它提高效率。
*/  
  
import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
  
  
public class Recursion {//求三角数字的递归算法:1,3,6,10,15,21, ......  
  
    static int theNumber;  
  
    public static void main(String[] args) throws IOException {  
        System.out.print("Enter a number: ");  
        theNumber = getInt();  
        //使用递归时调用,默认  
        int theAnswer = triangle(theNumber);  
        //使用非递归时调用  
        //int theAnswer=triangle2(theNumber);  
        System.out.println("Result: " + theAnswer);  
    }  
  
    public static int triangle(int n) {//递归方法,循环调用  
        if (n == 1) {  
            return 1;  
        } else {  
            return (n + triangle(n - 1));  
        }  
    }  
  
    public static int triangle2(int n) {//非递归方法  
        int total = 0;  
        while (n > 0) {  
            total = total + n--;  
        }  
        return total;  
    }  
  
    public static String getString() throws IOException {  
        InputStreamReader isr = new InputStreamReader(System.in);  
        BufferedReader br = new BufferedReader(isr);  
        String s = br.readLine();  
        return s;  
    }  
  
    public static int getInt() throws IOException {  
        String s = getString();  
        return Integer.parseInt(s);  
    }  
}  
  
/**
* 运行结果:
* Enter a number:  
* 3
* Result: 6
*/  
  
/**
* 总结:
* 使用非递归的方式更简洁,更易懂,运行效率更高,为什么还要用递归的算法呢。
* 递归使规模逐渐降低的方式解决问题,以这种统一的方式解决足够复杂的问题。
*/

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-29 09:51:00
8#
方法用别人叫调用,方法用自己叫递归调用。
回复 使用道具 举报
黑马网友  发表于 2011-9-29 09:52:24
9#
最后那个生命周期:
当activity进行切换可以写个切换的代码在DDMS中查看图片我接不上来告诉你流程:
activity01 onpaus==> activity02 onCreat==> activity02 onStart ==>activity 02 onResume ==>activyty01 onstop ==>activity01 ondestroy
就是在切换界面的时候并不是马上终止1号窗口,而是将2号窗口创建启动完成后将1号停止并销毁。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
递归:其实就是函数自己调用自己。

注意事项:
1,递归必须有条件限制。否则会出现栈内存溢出。
2,递归次数不能过多。小心内存溢出。


当功能需要被重复使用,而且下次使用的数据是上次函数中元素的结果。
这时可以用递归完成这个动作。


class DiGuiDemo
{
public static void main(String[] args)
{
    int sum = getSum(10000);

  System.out.println("sum="+sum);
}

public static int getSum(int n)
{
  if(n==1)    //当n是1时就返回1
   return 1;

//当n不是1时就返回n+getSun(n-1)
  return n+getSum(n-1);

}

  }

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马