佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 6141|回复: 32

Recursive vs. Looping (WHILE, FOR.. etc)

  [复制链接]
发表于 22-3-2011 04:12 PM | 显示全部楼层 |阅读模式
这里的人气不高... 所以小弟来搞些小小的投票...
如果要做 endless looping 或长周期 looping, 各位高手会用哪个方式呢?
单选投票, 共有 40 人参与投票
您所在的用户组没有投票权限
回复

使用道具 举报


ADVERTISEMENT

发表于 22-3-2011 10:54 PM | 显示全部楼层
1) recursive loop 根本不能做 endless looping 或长周期 looping
2) 我直接用thread, 没事做,就让thread睡觉。
回复

使用道具 举报

发表于 23-3-2011 02:14 AM | 显示全部楼层
2个不同的东西, 哪可以拿来比较..
回复

使用道具 举报

 楼主| 发表于 23-3-2011 08:45 AM | 显示全部楼层
回复 2# chrizyuen2


   是的... 可是... 在工作是... 发现有前 developer 如此使用... 有点傻眼.. 还好的是目前 network request 不多.
回复

使用道具 举报

发表于 24-3-2011 01:25 AM | 显示全部楼层
回复  chrizyuen2
是的... 可是... 在工作是... 发现有前 developer 如此使用... 有点傻眼.. 还好 ...
eh2001 发表于 23-3-2011 08:45 AM


我非常怀疑一件事情。 我认为你的前developer用了更高级技术 -》非同步委托 (async callback).
而不是你说的recursive loop.请你去查证。
回复

使用道具 举报

 楼主| 发表于 24-3-2011 07:50 AM | 显示全部楼层
我非常怀疑一件事情。 我认为你的前developer用了更高级技术 -》非同步委托 (async callback).
而不 ...
chrizyuen2 发表于 24-3-2011 01:25 AM


  1. private void waitSignal(){        try {            byte[] buff = new byte[256];            DatagramPacket packet = new DatagramPacket(buff, buff.length);            server_socket.receive(packet);
  2.             processPacket(packet);
  3.             waitSignal();                        }catch (Exception exp){            exp.printStackTrace();        }    }
复制代码


两者的差别... 我应该不会看错吧.
回复

使用道具 举报

Follow Us
发表于 24-3-2011 08:20 AM | 显示全部楼层
本帖最后由 chrizyuen2 于 24-3-2011 08:34 AM 编辑

回复 6# eh2001

囧 , 他那么牛,我也没办法。
Line30,对于新手来说,很像recursive,其实是async delegates
http://msdn.microsoft.com/en-us/library/fx6588te.aspx
  1. public static void ReadCallback(IAsyncResult ar) {
  2.         String content = String.Empty;
  3.         
  4.         // Retrieve the state object and the handler socket
  5.         // from the asynchronous state object.
  6.         StateObject state = (StateObject) ar.AsyncState;
  7.         Socket handler = state.workSocket;

  8.         // Read data from the client socket.
  9.         int bytesRead = handler.EndReceive(ar);

  10.         if (bytesRead > 0) {
  11.             // There  might be more data, so store the data received so far.
  12.             state.sb.Append(Encoding.ASCII.GetString(
  13.                 state.buffer,0,bytesRead));

  14.             // Check for end-of-file tag. If it is not there, read
  15.             // more data.
  16.             content = state.sb.ToString();
  17.             if (content.IndexOf("<EOF>") > -1) {
  18.                 // All the data has been read from the
  19.                 // client. Display it on the console.
  20.                 Console.WriteLine("Read {0} bytes from socket. \n Data : {1}",
  21.                     content.Length, content );
  22.                 // Echo the data back to the client.
  23.                 Send(handler, content);
  24.             } else {
  25.                 // Not all data received. Get more.
  26.                 handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
  27.                 new AsyncCallback(ReadCallback), state);
  28.             }
  29.         }
  30.     }
复制代码

回复

使用道具 举报

发表于 30-3-2011 03:54 PM | 显示全部楼层
=_= 基本上不会有人去用Recursive functions了... 书上学的大概是386的时代的做法吧?
回复

使用道具 举报


ADVERTISEMENT

发表于 30-3-2011 04:20 PM | 显示全部楼层
本帖最后由 chrizyuen2 于 30-3-2011 04:22 PM 编辑
=_= 基本上不会有人去用Recursive functions了... 书上学的大概是386的时代的做法吧?
megablue 发表于 30-3-2011 03:54 PM


朋友....我没听错吧.
recursive loop 在电脑无法缺席.
最简单例子

ls -R, --recursive              list subdirectories recursively
回复

使用道具 举报

发表于 30-3-2011 05:49 PM | 显示全部楼层
朋友....我没听错吧.
recursive loop 在电脑无法缺席.
最简单例子

ls -R, --recursive           ...
chrizyuen2 发表于 30-3-2011 04:20 PM


个人意见...
大部分的recursive functions 都可以使用 iteration loop 来代替....而且运行效能肯定会比recursive functions好。
debug 起来也比较简单...
回复

使用道具 举报

 楼主| 发表于 30-3-2011 06:27 PM | 显示全部楼层
个人意见...
大部分的recursive functions 都可以使用 iteration loop 来代替....而且运行效能肯定会比 ...
megablue 发表于 30-3-2011 05:49 PM



个人意见蛤... recursive 用于多层次计算, 会比 iteration loop 方便的多. 比如要找一个 tree 里的某一个 node 时...(以下献丑献丑... - Javascript)


function searchNode(root, node){
    var childs = root.childNodes;
    for (var c=0; c<childs.length; c++){
        var _child = childs[c];
        if (_child == node) return true;


        if (searchNode(_child, node)) return true;
    }


    return false;
}

一般的话, iteration loop 会比较方便.
回复

使用道具 举报

发表于 4-7-2011 03:58 PM | 显示全部楼层
你们都很厉害,小弟不知道什么是 recursive 还是looping...小弟只是想到logic,就可以写了,不管用什么方法,写出来的效果没问题就可以了。
回复

使用道具 举报

发表于 4-7-2011 04:45 PM | 显示全部楼层
回复 12# forexen

如果 IF & Case 都可以做到,你会用哪一个?如果 For, Foreach & While 都可以做到,你又会用哪一个?
回复

使用道具 举报

发表于 4-7-2011 05:35 PM | 显示全部楼层
回复 13# hooi1983

我没有规定用什么方法写,IF & Case 都可以,如果当时想到IF 就用IF,想到CASE就用CASE,我知道多数人只用IF,有的人用CASE为了show off, 我只要写出来的结果是对的,就可以了。因为我的client 不会管我用什么方法写,只要对了就可以了。
回复

使用道具 举报

发表于 4-7-2011 05:48 PM | 显示全部楼层
回复 14# forexen

为何说用 Case 就是 show off??
回复

使用道具 举报

发表于 4-7-2011 06:05 PM | 显示全部楼层
回复 15# hooi1983

可能是小弟的心理作用吧,以前读书时,我写IF,老师给少分,写case的比较高分,还有program 写越短越多分。
回复

使用道具 举报


ADVERTISEMENT

发表于 4-7-2011 06:33 PM | 显示全部楼层
回复 16# forexen

想了解你的程度而已。看到你的回复,算了。
回复

使用道具 举报

发表于 8-7-2011 09:18 PM | 显示全部楼层
Recursive 長期 looping 會 stack overflow 的.
回复

使用道具 举报

 楼主| 发表于 17-8-2011 08:40 PM | 显示全部楼层
Recursive 長期 looping 會 stack overflow 的.
馬拉棧 发表于 8-7-2011 09:18 PM



没错.
回复

使用道具 举报

 楼主| 发表于 17-8-2011 08:44 PM | 显示全部楼层
回复  hooi1983

可能是小弟的心理作用吧,以前读书时,我写IF,老师给少分,写case的比较高分,还 ...
forexen 发表于 4-7-2011 06:05 PM


个人比较喜欢 if... else if... 至于 case... 不是很喜欢


没有什么 show 不 show off 的, 只有逻辑可行及整齐就好.
老师会给 case 比较高分.. 应该是当时 case 刚刚教到吧?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 21-11-2025 12:54 PM , Processed in 1.015512 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表