2012-03-15 97 views
1

我在bash中编写它有一个问题...我知道它是如何在C++中起作用的,但是我在bash中执行它时遇到了麻烦。这是我得到的:bash中的递归求和函数

sum() 
{ 
    let minusOne=$1-1 
    let result=sum $minusOne +$1 

} 
+0

你可以发布'sum'的'C++'版本吗? – kev 2012-03-15 14:49:44

回答

1

您需要一个退出条件。在bash中,$((...))是算术扩展,而$(...)是命令替换(请参阅man page)。

sum() { 
    if (($1 == 1)); then 
     echo 1 
     return 
    fi 
    local minusOne=$(($1 - 1)) 
    echo $(($1 + $(sum $minusOne))) 
} 

非递归的方式来写一个求和函数:

sum() { 
    set -- $(seq 1 $1) 
    local IFS=+ 
    echo "$*" | bc 
} 
+0

非常感谢!一个问题,但是,我怎么得到这个值的变量?如let var = $(($ 1 + $(sum $ minusEna))??它给出一个错误(预期的操作数)... – Kajzer 2012-03-15 16:24:22

+0

你会说'theSum = $(sum 5)' – 2012-03-15 17:01:06

0

这里是给你作为参数提供的数字之和的功能。下面打印“10”:

#!/bin/bash 

sum() { 
    local total=0 
    for number in "[email protected]"; do 
     ((total += number)) 
    done 

    echo $total 
} 

sum 1 2 3 4