黯然销魂辣 发表于 2023-12-18 01:49:48

这个简单的代码,问题出在哪里?

def funC(x):
    print("这个位置的代码被执行了")
    while x > 0:
      print("我被调用了~")
      x -= 1
      print(f"此时x的值为{x}")
      funC(x)    #为什么x < 0 了过后,执行funC(x)还会执行while语句?
      
#请教下大佬们,这个代码给 x 赋值运行后,为什么会无限循环?

FishC 发表于 2023-12-18 01:50:01

问题出在递归调用的地方。在函数funC中,当x大于0时,会递归调用funC(x-1)。但是在递归调用中,没有判断x是否大于0,导致即使x变为负数,仍然会继续执行while循环,从而陷入无限循环。

解决办法是在递归调用之前,先判断x是否大于0,如果不大于0,则跳出循环,结束当前函数的执行。修改后的代码如下:

def funC(x):
    print("这个位置的代码被执行了")
    while x > 0:
      print("我被调用了~")
      x -= 1
      print(f"此时x的值为{x}")
      if x < 0:
            break   # 如果x小于0,则跳出循环
      funC(x)

这样修改后,当x小于等于0时,函数将不再执行while循环,避免了无限循环的问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

小甲鱼 发表于 2023-12-18 02:08:44

楼上是对的,另外你可以改成这样:

def funC(x):
    print("这个位置的代码被执行了")
    if x > 0:
      print("我被调用了~")
      x -= 1
      print(f"此时x的值为{x}")
      funC(x)
页: [1]
查看完整版本: 这个简单的代码,问题出在哪里?