shell 脚本中的递归

在shell脚本中,变量默认都是全局的。所以递归调用时需要使用local关键字来显示标识局部变量,这样就可以实现函数的递归调用。
自己写了个递归算阶乘的脚本,发现当N=7之前都正常,之后就计算结果错误了。后来发现$?取函数的返回值时,这个数字的上限是很小的,只到255。所以后来使用了一个全局变量来保存每次递归的结果。

#!/bin/bash

N=$1
RET=1

function multi()
{
    local LOCAL_N=$1
    local LOCAL_N_SUB_1=$(($LOCAL_N - 1))

    if [ $LOCAL_N_SUB_1 -lt 1 ]
    then
        RET=1
    else
        multi $LOCAL_N_SUB_1
        RET=`expr $LOCAL_N \* $RET`
    fi
}

multi $N

echo $RET


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值