分页: 1 / 1
关于shell 的递归函数的一道题···
发表于 : 2009-05-24 15:02
由 非主流1987
因为学习,所以要完成一道用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
这个脚本已经实现了要求,只是我觉得应该不只一种方法,所以就放上来,希望各位大牛们(

我知道你们不介意这个称呼的)帮忙看看,有意见的提意见,有想法的提想法····
ps:我知道很简单,但是我对递归函数的应用实在不够熟悉,所以希望学到更多~民那~多多指教拉~
Re: 关于shell 的递归函数的一道题···
发表于 : 2009-05-24 15:14
由 HuntXu
代码: 全选
export a="";for i in `seq 0 9`;do a+=$i;echo $a;done
这种问题就不应该用递归...
Re: 关于shell 的递归函数的一道题···
发表于 : 2009-05-24 17:20
由 非主流1987
呵呵···都说是学习需要咯~~也就是老师无聊,想让我们了解递归函数的说~~所以就要求用递归咯~
循环我也写出来了~
只是我还是希望有没有其他的递归方法而已~
Re: 关于shell 的递归函数的一道题···
发表于 : 2009-05-24 21:49
由 astolia
代码: 全选
#!/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
Re: 关于shell 的递归函数的一道题···
发表于 : 2009-05-26 15:43
由 非主流1987

ls真积极~~把所有的语句都整合到一句话里面····
有个问题,有没有办法将只用一个函数,和一个参数就完成以上的功能~~
Re: 关于shell 的递归函数的一道题···
发表于 : 2009-05-26 17:05
由 xiooli
代码: 全选
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
Re: 关于shell 的递归函数的一道题···
发表于 : 2009-05-26 17:53
由 非主流1987
虽然ls大神你的代码很简洁的说···但是,我想说,能用递归函数嘛···
不过真的谢谢了ls的各位大神···让我学习了不少东西的说····
Re: 关于shell 的递归函数的一道题···
发表于 : 2009-05-27 20:26
由 astolia
非主流1987 写了:
ls真积极~~把所有的语句都整合到一句话里面····
有个问题,有没有办法将只用一个函数,和一个参数就完成以上的功能~~
那必须在函数里用循环或类似的方法,没什么意思了。
代码: 全选
#!/bin/sh -
p(){
[ $1 -lt 10 ] && seq -s' ' 0 $1 | sed 's/ //g' && p $(($1+1))
}
p 0