分页: 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
这个脚本已经实现了要求,只是我觉得应该不只一种方法,所以就放上来,希望各位大牛们( :em04 我知道你们不介意这个称呼的)帮忙看看,有意见的提意见,有想法的提想法····
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
:em04 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 写了::em04 ls真积极~~把所有的语句都整合到一句话里面····
有个问题,有没有办法将只用一个函数,和一个参数就完成以上的功能~~
那必须在函数里用循环或类似的方法,没什么意思了。

代码: 全选

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