shell中

时间:2015-12-30 06:28:26

标签: recursion sh ksh

我试图让这个尽可能简单,我仍然试图理解为什么递归在下面的例子中失败了。

#!/bin/sh

foo()
{
echo "Enter a number"
read num
if [ $num -eq 1 ]; then
foo $num
fi
echo "Hi"
sleep 1
}
while true
do
foo
done

只需点击“1”(您将输入if语句和递归),您将最终执行两次“hi”或者输入“1”的次数。我怎么能解决这个问题?

示例执行

Enter a number
1
Enter a number
 1
Enter a number
2
Hi
Hi
Hi

1 个答案:

答案 0 :(得分:0)

递归没有失败。当调用递归函数时,在函数调用发生之前执行,并且在函数返回后执行函数后执行。

打印“Hi”的代码部分将始终执行, 考虑到你没有递归调用函数的情况,“嗨”会打印出来,现在正在发生同样的事情。 如果您打算调用该函数 - 多次foo,“Hi”将被打印多次。