【问题标题】:Error in Recursion递归错误
【发布时间】:2014-11-18 11:42:07
【问题描述】:
import sys,math

def Check_Prime(n) :
    if n%2 and n<3 :
        return False
    else :
        return all(n%p for p in range(3,int(math.sqrt(n))+1,2))

def Reduce(n) :
    if Check_Prime(n) :
        Reduce(n-1)
    else :
        return n

def main(*args,**kwargs) :
    for __ in range(input()) :
        l,b=map(int,sys.stdin.readline().split(' '))
        l=Reduce(l)
        b=Reduce(b)
        print l*b

if __name__ == "__main__" :
    main()

一旦Reduce() 函数中的条件失败,它就不会返回。

我尝试在 else 块内 print n 的值并成功打印它,但它未能在 else 块内返回该值。

【问题讨论】:

  • 缩进在 Python 中是导入的;没有格式,我们无法判断出什么问题。请read the editing help。您还应该考虑阅读the style guide
  • 缩进实际上是存在的,只是没有放在代码块中,所以 StackOverflow 没有显示它。我什么都没猜到。
  • @jonrsharpe 我刚刚编辑了我的帖子...现在缩进了...
  • 请参阅所有其他递归问题 - 你没有 return 递归调用的值。
  • @DanielDarabos 现在缩进以适应 stackoverflow 以显示代码最初的样子...

标签: python python-2.7 recursion primes


【解决方案1】:

您的函数Reduce() 在递归时没有返回任何内容。你想改变

def Reduce(n) :
    if Check_Prime(n) :
        Reduce(n-1)
    else :
        return n

进入

def Reduce(n) :
    if Check_Prime(n) :
        return Reduce(n-1)
    else :
        return n

这样,Reduce 中的每个代码路径都会返回一个值。

【讨论】:

  • 是的,谢谢...您能否提供一些有关如何在 stakoverflow 中发布代码的链接...。
  • @pvkcse 通常,您希望在帖子中的代码前面添加四个空格。请参阅StackOverflow's docs 了解更多信息。
  • 现在我明白了...谢谢@Arda Xi
猜你喜欢
  • 1970-01-01
  • 2011-12-26
  • 2017-07-18
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多