我试图让这个尽可能简单,我仍然试图理解为什么递归在下面的例子中失败了。
#!/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
答案 0 :(得分:0)
递归没有失败。当调用递归函数时,在函数调用发生之前执行,并且在函数返回后执行函数后执行。
打印“Hi”的代码部分将始终执行, 考虑到你没有递归调用函数的情况,“嗨”会打印出来,现在正在发生同样的事情。 如果您打算调用该函数 - 多次foo,“Hi”将被打印多次。