免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2132 | 回复: 11
打印 上一主题 下一主题

帮忙看看脚本~!【解决】 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-21 11:44 |只看该作者 |倒序浏览
#!/bin/sh
prnum() {
y=$1
while [ $y -ge 0 ];
do
if [ $y -le $x ];then
echo -n "$y "
ornum $((y - 1))
fi
done
}
x=0
while [ $x -lt 10 ]
do
prnum $x
echo
x=$((x + 1))
done




现在输出是:
0
10
210
……
9876543210


如何能够让他们反过来输出,即:
0
01
012
……
0123456789

这个是要求递归算法,而且只能在函数prnum()里面改~!!

[ 本帖最后由 锕鸿 于 2009-5-21 13:29 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-05-21 12:05 |只看该作者
其实直接这样就能达到你要的效果:

  1. for ((i=0;i<10;i++)); do eval echo {0..$i}; done
复制代码

论坛徽章:
0
3 [报告]
发表于 2009-05-21 12:07 |只看该作者
原帖由 kwokcn 于 2009-5-21 12:05 发表
其实直接这样就能达到你要的效果:

for ((i=0;i

我知道可以直接达到~!!但这里我需要的是递归算法,所以……
帮忙想想

论坛徽章:
0
4 [报告]
发表于 2009-05-21 12:34 |只看该作者
理解递归就行了,用餐刀练习砍柴会有点吃力。:)

  1. #!/bin/sh
  2. prnum() {
  3.         y=$1" "$y

  4.         if [[ $1 -eq 0 ]]; then
  5.                 echo -n $y
  6.                 unset y
  7.                 return
  8.         fi

  9.         prnum $(($1 - 1))
  10. }

  11. x=0
  12. while [ $x -lt 10 ]
  13. do
  14. prnum $x
  15. echo
  16. x=$((x + 1))
  17. done
复制代码

论坛徽章:
0
5 [报告]
发表于 2009-05-21 12:45 |只看该作者
原帖由 kwokcn 于 2009-5-21 12:34 发表
理解递归就行了,用餐刀练习砍柴会有点吃力。:)

#!/bin/sh
prnum() {
        y=$1" "$y

        if [[ $1 -eq 0 ]]; then
                echo -n $y
                unset y
                 ...



y=$1" "$y    什么意思??unset是取消什么??运行好像有问题~~

论坛徽章:
0
6 [报告]
发表于 2009-05-21 13:12 |只看该作者
原帖由 锕鸿 于 2009-5-21 12:45 发表



y=$1" "$y    什么意思??unset是取消什么??运行好像有问题~~

组装字符串。unset清除变量。
我刚试了一下没问题。你那边哪里报错?
如果是unset报错,换成y=""也行。

论坛徽章:
0
7 [报告]
发表于 2009-05-21 13:18 |只看该作者
原帖由 kwokcn 于 2009-5-21 13:12 发表

组装字符串。unset清除变量。
我刚试了一下没问题。你那边哪里报错?
如果是unset报错,换成y=""也行。



原来上面if条件那里多了个中括号~!!!现在行了
可以多说说组装字符串的用法么??因为是第一次遇到这种用法~!!
麻烦你了

论坛徽章:
0
8 [报告]
发表于 2009-05-21 13:25 |只看该作者
原帖由 锕鸿 于 2009-5-21 13:18 发表



原来上面if条件那里多了个中括号~!!!现在行了
可以多说说组装字符串的用法么??因为是第一次遇到这种用法~!!
麻烦你了

呃……这个没什么可讲的,可能我随口这么一说有点故作声势了。
我所说的组装字符串就是这么回事:
y="1";
y="2"$y;
这个时候y就成了"21"。相当于C++里头string str,str2="a",str3="b"; str=str2+str3。

论坛徽章:
0
9 [报告]
发表于 2009-05-21 13:29 |只看该作者
原帖由 kwokcn 于 2009-5-21 13:25 发表

呃……这个没什么可讲的,可能我随口这么一说有点故作声势了。
我所说的组装字符串就是这么回事:
y="1";
y="2"$y;
这个时候y就成了"21"。相当于C++里头string str,str2="a",str3="b"; str=str2+str3。



噢~!!
原来这样~!!!
明白了,哈哈,差点被这个名字唬了~~~
谢谢你啊!~~~又学到东西了

论坛徽章:
0
10 [报告]
发表于 2009-05-21 13:37 |只看该作者

  1. #!/bin/sh
  2. prnum() {
  3. local y=$1
  4. [ $y -gt 0 ] && prnum $((y-1))
  5. echo -n "$y "
  6. }



  7. x=0
  8. while [ $x -lt 10 ]
  9. do
  10. prnum $x
  11. echo
  12. x=$((x + 1))
  13. done

  14. 看了LZ的对递归的调用,感觉怪怪的

  15. 在shell函数中,只要用 local 声明一下变量,那么该变量就不受其他函数影响了。
复制代码

[ 本帖最后由 springwind426 于 2009-5-21 13:51 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP