关于shell 的递归函数的一道题···

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
非主流1987
帖子: 427
注册时间: 2008-05-09 23:50

关于shell 的递归函数的一道题···

#1

帖子 非主流1987 » 2009-05-24 15:02

因为学习,所以要完成一道用shell写的递归函数(maybe对很多人来说很简单的说)
要求输出结果是:
0
01
012
0123
01234
012345
0123456
01234567
012345678
0123456789
我写了一个脚本,如下

代码: 全选

#/bin/sh
i=0
prnum(){
   echo -n "$i"
   if [ $i -lt $x ]
   then
     i=$((i+1))
     prnum $i
   fi
}
x=0
while [ $x -lt 10 ]
do
  prnum $x
  echo
  i=0
  x=$((x+1))
done
这个脚本已经实现了要求,只是我觉得应该不只一种方法,所以就放上来,希望各位大牛们( :em04 我知道你们不介意这个称呼的)帮忙看看,有意见的提意见,有想法的提想法····
ps:我知道很简单,但是我对递归函数的应用实在不够熟悉,所以希望学到更多~民那~多多指教拉~
头像
HuntXu
帖子: 5776
注册时间: 2007-09-29 3:09

Re: 关于shell 的递归函数的一道题···

#2

帖子 HuntXu » 2009-05-24 15:14

代码: 全选

export a="";for i in `seq 0 9`;do a+=$i;echo $a;done
这种问题就不应该用递归...
HUNT Unfortunately No Talent...
头像
非主流1987
帖子: 427
注册时间: 2008-05-09 23:50

Re: 关于shell 的递归函数的一道题···

#3

帖子 非主流1987 » 2009-05-24 17:20

呵呵···都说是学习需要咯~~也就是老师无聊,想让我们了解递归函数的说~~所以就要求用递归咯~
循环我也写出来了~
只是我还是希望有没有其他的递归方法而已~
头像
astolia
论坛版主
帖子: 6434
注册时间: 2008-09-18 13:11

Re: 关于shell 的递归函数的一道题···

#4

帖子 astolia » 2009-05-24 21:49

代码: 全选

#!/bin/sh -
p(){
    [ "$1" -lt "$2" ] && echo -n "$1" && p $(($1+1)) $2
}
for i in 1 2 3 4 5 6 7 8 9 10;do p 0 $i;echo;done
or

代码: 全选

#!/bin/sh -
p(){
    [ "$1" -lt "$2" ] && echo -n "$1" && p $(($1+1)) $2
    return 0
}
q(){
    [ "$1" -le 10 ] && p 0 $1 && echo && q $(($1+1)) 
}
q 1
or

代码: 全选

#!/bin/sh -

p(){
    [ "$1" -lt "$2" ] && echo -n "$1" && p $(($1+1)) $2 || [ "$2" -lt 10 ] && echo && p 0 $(($2+1)) || echo && exit
}

p 0 1
头像
非主流1987
帖子: 427
注册时间: 2008-05-09 23:50

Re: 关于shell 的递归函数的一道题···

#5

帖子 非主流1987 » 2009-05-26 15:43

:em04 ls真积极~~把所有的语句都整合到一句话里面····
有个问题,有没有办法将只用一个函数,和一个参数就完成以上的功能~~
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: 关于shell 的递归函数的一道题···

#6

帖子 xiooli » 2009-05-26 17:05

代码: 全选

xiooli(~)<< xx() { for a in `seq 0 9`;do b=$b$a;echo $b;done }
xiooli(~)>> xx
0
01
012
0123
01234
012345
0123456
01234567
012345678
0123456789
头像
非主流1987
帖子: 427
注册时间: 2008-05-09 23:50

Re: 关于shell 的递归函数的一道题···

#7

帖子 非主流1987 » 2009-05-26 17:53

虽然ls大神你的代码很简洁的说···但是,我想说,能用递归函数嘛···
不过真的谢谢了ls的各位大神···让我学习了不少东西的说····
头像
astolia
论坛版主
帖子: 6434
注册时间: 2008-09-18 13:11

Re: 关于shell 的递归函数的一道题···

#8

帖子 astolia » 2009-05-27 20:26

非主流1987 写了::em04 ls真积极~~把所有的语句都整合到一句话里面····
有个问题,有没有办法将只用一个函数,和一个参数就完成以上的功能~~
那必须在函数里用循环或类似的方法,没什么意思了。

代码: 全选

#!/bin/sh -
p(){
	[ $1 -lt 10 ] && seq -s' ' 0 $1 | sed 's/ //g' && p $(($1+1))
}
p 0
回复