2015-03-23 2 views
0

Учитывая пример функции:Как python обрабатывает возвращаемую переменную в функции рекурсии?

def FooBar(foo_exp): 
    if Bar: 
      update_Foo(foo_exp)      
      FooBar(foo_exp) 
    else: 
     newNode = fooNode(foo_exp) 
     print "The value of newNode is ",newNode 

     return newNode 

следующие результаты при вызове с a = FooBar(foo_exp):

The Value of NewNode is foo_exp - When called inside the class FooBar 

Но переменная a заполняется значением типа None (В случае, если функция не возвращается ничего)

Может ли это рекурсия в этой функции? Есть ли еще какой-то фактор?

A = Тип None, даже если return NewNode закомментирован. Это заставляет меня полагать, что Python возвращает тип None для функций без явного значения возврата.

+0

Откуда взята переменная «Bar»? Это глобальный? –

+0

Также откуда взялся «rootnode»? – zehnpaard

+0

@AndrewMagee Bar является локальным для функции - предположим, что он всегда срабатывает хотя бы один раз. Я думаю, что это больше проблема с моей абстракцией моего примера кода, но я вижу, что в этом примере Bar никогда не обновляется. –

ответ

0

Ваша рекурсивная функция имеет две ветви: Если Bar (независимо от того, что есть), не соответствующие действительности, функция возвращает некоторый новый узел. В противном случае функция рекурсивно называется - но нет возвращаемого значения.

Поэтому, если вы хотите всегда иметь какое-либо возвращаемое значение, вы должны убедиться, что все пути кода возвращают некоторое значение. Например, вы могли бы вернуть значение из вызова рекурсивной функции:

return FooBar(foo_exp) 
0

Вам не хватает return в блоке if?

if Bar: 
    update_Foo(foo_exp)      
    return FooBar(foo_exp) 
0

Предложения else выглядит ваш базовый случай. Вам необходимо вернуть результат рекурсии.

return FooBar(foo_exp) 
Смежные вопросы