zoukankan      html  css  js  c++  java
  • shell-递归函数(计算阶乘)

    定义

    shell函数的递归函数调用,就是把函数本身作为一个参数来调用。
    函数既是调用者又是被调用者,每调用一层就进入新的一层。

    例如:

    #!/bin/bash
    func ()
    {
            read i      #标准输入读取数据i
            func "$i"      #调用自身
            echo "$i"      #输出$i
    }
    func      #调用函数
    

    事实上上面的代码逻辑上是有问题的,函数func里面调用自身的话,在他调用的这个func里面又有一个func的调用,func的调用里面又有一个调用......和玄幻小说类似,世界之上有小世界,进入小世界后又有三千大世界......这样就陷入了一个死循环(是不是很像一个小品 (•‾̑⌣‾̑•)✧˖°)

    为了使函数到达目的后就退出,就得想循环一样,给定一个终止条件。条件满足时,不再递归调用,逐层返回,直至最外层调用。
    举个简单的例子(计算阶乘):

    一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。
    n!=1×2×3×...×(n-1)×n或者是0!=1,n!=(n-1)!×n

    #!/bin/bash
    echo "请输入"
    read n
    echo
    func ()
    {
            local i="$1"
            if [ "$i" -eq 0 ]; then
                    result=1
            else
                    let "m=i-1"
            func "$m"
                    let "result=$i * $?"
            fi
                    return $result
    }
    func "$n"
    echo "$n的阶乘为:$?"
    

    计算结果

    验算一下:
    3!=1*2*3=6
    OK

  • 相关阅读:
    c++ 模板<template class T>
    HTML Agility Pack 搭配 ScrapySharp,彻底解除Html解析的痛苦
    用1年的经验做了10年还是,用10年的经验做一件事.
    last_inset_id()mysql注意
    小心变成这样一个人!!!
    主动哥
    转:开个小书店。。呵呵
    mysql 更改主键信息
    磁盘预录
    评估项目
  • 原文地址:https://www.cnblogs.com/hxlinux/p/13041173.html
Copyright © 2011-2022 走看看