2014-11-18 3 views
-1
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() не срабатывает.Ошибка в рекурсии

Я попытался print значение n внутри else блока и успешно печатали, но он не в состоянии вернуть это значение внутри else блока.

+0

Отступ импорта в Python; без форматирования, мы не можем сказать, что случилось. Пожалуйста, [** прочитайте справку по редактированию **] (http://stackoverflow.com/editing-help). Вы также должны рассмотреть возможность чтения [руководства по стилю] (http://legacy.python.org/dev/peps/pep-0008/). – jonrsharpe

+1

Отступ был на самом деле там, он просто не помещался в блок кода, поэтому StackOverflow не отображал его. Я ничего не догадывался. –

+0

@jonrsharpe Я только что отредактировал свой пост ... теперь он отступил ... – pvkcse

ответ

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 

Таким образом, каждый путь кода в Уменьшить возвращает значение.

+0

Да, спасибо ... и могли бы вы предоставить мне некоторые ссылки о том, как отправлять коды в stakoverflow .... – pvkcse

+0

@pvkcse Как правило, вы хотите добавить четыре пробела перед своим кодом в сообщении. Дополнительную информацию см. В документах [Документы StackOverflow] (https://stackoverflow.com/editing-help). –

+0

Теперь я получил ... Спасибо @Arda Xi – pvkcse

Смежные вопросы