免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7848 | 回复: 25

[悬赏4000积分]不使用迭代或递归创建一个数据发生器 [复制链接]

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
发表于 2014-06-19 02:06 |显示全部楼层
30可用积分
要求不使用迭代或递归算法,设计一个函数:调用一次后,就会持续产生递增的输出。

        fuction() --> 1 2 3 4 5 6 ....

据说这是只能使用一种特别的语言才能实现的算法。

最佳答案

查看完整内容

回复 9# 104359176

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2014-06-19 02:06 |显示全部楼层
本帖最后由 yinyuemi 于 2014-06-19 11:20 编辑

回复 9# 104359176
  1. closure
  2. 不过核心还是递归?
  3. perl -le 'sub f {$m=shift;return  sub  {$x=shift;print $x++;unless($m){f()->($x)}elsif($m>=$x){f($m)->($x)}}};f(5)->(1)'
复制代码

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
发表于 2014-06-19 06:28 |显示全部楼层
用循环不算?

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
发表于 2014-06-19 07:42 |显示全部楼层
关注高手出现.

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
发表于 2014-06-19 08:16 |显示全部楼层
kan bu dong ~~

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
发表于 2014-06-19 08:25 |显示全部楼层
就好象 Clojure 中的 iterate 函数。

   (iterate inc 5) => 5 6 7 8 9 ...

如果不限定输出的数量,就不会停止

   (take 10 (iterate inc 5))

我说的当然不是 Clojure 的函数,是这种算法需要的一种语言特性:函数的动态自我定义。

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
发表于 2014-06-19 09:01 |显示全部楼层
等待大神出现~~~~

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
发表于 2014-06-19 09:19 |显示全部楼层
本帖最后由 laputa73 于 2014-06-19 09:19 编辑

类似这样?
  1. #!/bin/env perl
  2. my @out=&iterate(5,10);
  3. print "@out\n";
  4. print "=====\n";
  5. @out=&iterate(5);
  6. print "@out\n";
  7. print "=====\n";
  8. @out=&iterate();
  9. print "@out\n";


  10. sub iterate($$){
  11. my ($inc,$take)=@_;
  12. my @ret;
  13. if(not defined $inc) {$inc=1;}
  14. if(not defined $take ) {$take=5;}
  15. for(my $i=$inc;$i<$inc+$take;$i++){
  16.    push @ret,$i;
  17. }
  18. return @ret;
  19. }
复制代码
输出
  1. -bash-3.2$ ./tit.pl
  2. 5 6 7 8 9 10 11 12 13 14
  3. =====
  4. 5 6 7 8 9
  5. =====
  6. 1 2 3 4 5
  7. -bash-3.2$
复制代码

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
发表于 2014-06-19 10:47 |显示全部楼层
回复 7# laputa73


    效果就是这样,但不是硬编码

     (take number(iterate step-length))

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
发表于 2014-06-19 10:52 |显示全部楼层
我还是把答案先写上来,是用 newLISP 实现的,因为 只有 newLISP 有这个特性,Scheme 都没有,更别说其他语言了。
  1.     (define (iterate)
  2.        (begin
  3.           (println (inc cnt))
  4.           (push (last f) f -1)
  5.           (if (> (length f) 3) (pop f 1))))
复制代码
这个玩意叫“履带式拖拉机”,会持续的运行,而没有用到迭代或递归。新的代码将根据旧代码被扩展到函数的末尾,旧代码执行完毕后就从函数头部被剔除。

newLISP 的函数能够自己修改自己,这在所有语言中是独一无二的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP