为什么它表现得像无限循环

时间:2014-09-30 17:11:50

标签: c

# include<stdio.h>

int somthing(int);
int main()
{
  int i=9;
  somthing(i);
  return 0;
}

int somthing(int i)
{
  if(i == 0)
    return 0;
  else
    printf("%d,", i);
  somthing (i--);
}

我不明白为什么编译器只打印 9 9 9 ,然后说出超时无限运行。 我确实在 i变量上减去了一个值,每次应该进入循环,它应该打印从9到0的值,代码在 i变量上进行预减量时工作正常

2 个答案:

答案 0 :(得分:3)

我确实在i变量上减去了一个值,每次应该进入循环,它应该打印从9到0的值

您正在使用的i--是后期增量。它会将i的值发送到something()函数,然后递减i的值。因此,somthing()函数始终获取值9。因此它进入无限递归调用。

你需要的是preincrement --i。它将递减i的值,然后将其发送到函数somthing()

答案 1 :(得分:1)

int somthing(int i)
{
  if(i == 0)
    return 0;
  else
    printf("%d,", i);
    somthing (--i);
}

这样做。看看是否有效