【问题标题】:Recursive function in Python - Why line 7 was executed while if condition is false? [duplicate]Python中的递归函数-如果条件为假,为什么执行第7行? [复制]
【发布时间】:2021-06-12 08:18:41
【问题描述】:

我是新手,这是我在 StackOverflow 上的第一个愚蠢问题。有人能告诉我为什么在条件为假时执行第 7 行(input = 1)吗? This is the screenshot 非常感谢,祝你一切顺利!

print("line 1 - START OF CODE - right before function 'def decimalToBinary(num)' \n", "line 2-9 - define function 'decimalToBinary(num)'")
def decimalToBinary(num):
    print("\n Line 2 - execute the function 'decimalToBinay(num)'' \n Line 3 - right before if statement - at this line num value is:", num, ", var number is:",number,"\n")
    if num > 1:
        print("Line 4-5 - 'if statement' is true (num > 1), num value is", num, "> 1", "\n Line 6 - recall function 'decimalToBinary(num // 2)' \n")
        decimalToBinary(num // 2)
        print("Line 7 - 'if statement' end - This is num after line 6 'decimalToBinary(num // 2)'. Num is",num)
    print("Line 8 - This is num before the line 'print(num % 2)':", num)
    print("Line 9 - This is result of num % 2:", num % 2, "\n")
number = int(input("line 10 - Ask user 'Enter any decimal number:' then assign this value to var 'number' \n line 11 - call function 'decimalToBinary(number)': "))
decimalToBinary(number) #function call
print("line 12 - END OF CODE")

【问题讨论】:

  • 因为没有return
  • 我有点困惑,条件是 num 大于 1,如果输入 >=2 则代码块应该运行?
  • 你能解释一下你期望的输出吗?
  • @Sven Eberth:感谢您的帮助。但我有点困惑,因为第 7 行属于“if 语句”(第 4 行),所以我认为第 7 行不应该在条件错误时执行,
  • @Sven Eberth:我希望在input = 1 时永远不应该执行第 7 行

标签: python if-statement recursion


【解决方案1】:

根据我对您的问题的理解,您的假设是如果输入为 2,那么if num > 1 当然会运行。然后它转到decimalToBinary(num//2)。 但是,要做到这一点,您需要将第 6 行更改为 return decimalToBinary(num//2)

【讨论】:

    【解决方案2】:

    你需要从你的函数中返回一些东西。然后,当递归返回时,您需要将此(最低有效)数字添加到您从父级获得的数字中。

    def decimalToBinary(num):
        s = ''
        if num > 1:
            s = decimalToBinary(num // 2)
        return s + str(num%2)
    number = int(input("Enter any decimal number:"))
    print(decimalToBinary(number))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2020-09-28
      相关资源
      最近更新 更多