python tail递归函数没有返回

时间:2015-08-17 04:20:31

标签: python recursion return

我有一个修改列表的函数,但它不会返回任何内容。这是一个很长的功能,但举一个例子,以下是同样的问题。为什么不归还任何东西?

def inventedfunction(list1):
    list2=list1[:-1]
    if len(list2)!=1:
        inventedfunction(list2) 
    else:
        return list2  

2 个答案:

答案 0 :(得分:2)

return inventedfunction(list2)替换为def inventedfunction(list1): list2=list1[:-1] if len(list2)!=1: return inventedfunction(list2) else: return list2 。如果你只是在没有return语句的情况下调用它,结果将被抛出。

工作代码:

angular.module('app').directive('darkroom', function() {
    return {
        restrict: 'A',
        scope: {},
        link: function(scope, elem, attrs) {

            new Darkroom('#'+attrs.id, {
                // Size options
                minWidth: 100,
                minHeight: 100,
                maxWidth: 350,
                maxHeight: 400,
                ratio: 4/3,
                backgroundColor: '#F0F8FF',

                // Plugins options
                plugins: {
                    save: false,
                    crop: {
                       quickCropKey: 67, //key "c"
                       //minHeight: 50,
                        //minWidth: 50,
                      //ratio: 4/3
                    }
                },

                // Post initialize script
                initialize: function() {
                    var cropPlugin = this.plugins.crop;
                    cropPlugin.requireFocus();
                }
            });
        }
    }
});

答案 1 :(得分:0)

你没有说出这个功能应该做什么,所以我假设"发明了功能"意味着"倒置功能"。即使这不正确,这个想法也是一样的。如果情况不是这样,或者您不明白,请回复更多信息。

你没有收到任何回报,如果len(list2)!= 1,你也不会返回任何内容(无)。你还必须创建第二个列表来保存从中删除的数字发送到函数的列表,并根据代码的结构方式返回更新的列表。

def inventedfunction(list1, new_list=[]):
    ## at the least add print statements so you know what is happening
    print new_list, "----->",  list1
    list2=list1[:-1]
    new_list.append(list1[-1])  ## append item removed from list1 --> list2
    if len(list2):
        new_list, list2=inventedfunction(list2)
    return new_list, list2  ## both updated lists returned

print inventedfunction([1, 2, 3, 4, 5])