Lintcode 用递归打印从1到N位的最大整数

15 篇文章 0 订阅
1 篇文章 0 订阅

题目要求用递归打印从1到N位的最大整数(十进制),如n=2 返回[1,2,…99].
实际上这道题是想让我们用全排列的思想分别按位进行递归,每位有0-9这十种可能。然而当用python写的时候不好用string类型存储数字,因为字符串不可改变。而用list存储数字的时候是酱紫的[1,9],对应数字19.然后还要对这个再进行处理。
所以干脆用最简单的数字,递增递归。(这样栈会爆,因为这是一个大数问题,python中栈有最大值,而且没有对尾递归做优化。然而我只是想用这个先打个样。)结果又出现了新的问题。发现我对递归的人是真是好模糊!对python的函数编程真的好浅薄!

class Solution:
    # @param n: An integer.
    # return : A list of integer storing 1 to the largest number with n digits.
    def numbersByRecursion(self, n,result):
        # write your code here
        largest = pow(10,n)-1
        i = 1
        *self.recursion(i,largest,result)*
    def recursion(self,num,largest,result):
        if num > largest:
            print 'num = ',num
            return result
        result.append(num)
        return self.recursion(num+1,largest,result)

if __name__ == '__main__':
    result = []
    sol = Solution()
    re = sol.numbersByRecursion(1,result)
    print re

怎么调试都是返回None!这是为什么呢?stackoverflow上有个人给出个写法:

def numbersByRecursion(n,largest,result):`
    def recursion(num,largest,result):
        if num <= largest:
            result.append(num)
            return recursion(num+1,largest,result) 
        else:
            return result
    return recursion(n,largest,result)

哎他的怎么就可以呢?而且def函数可以嵌套,想起了保健哥的形式化方法的课,感觉学的东西又都还给他了。以前讲的Continuation和CPS以及高阶函数学好了感觉理解这个和递归就比较简单了:(
后来发现我上一个程序斜体的地方忘记写了return。这样每次到这里都调用自己做下一层递归(recursion函数),最后返回到最初调用recursion的函数numberByRecursion的时候虽然Recursion返回了Result,但是并没有人接,不仅没人接,numberByrecursion还没有return,那默认是返回None的,所以返回了None,而不是result 列表。
感觉对递归的理解不是很深。不知道上面的想法是否正确,欢迎明白的同学在评论下方发言指正!尤其是对递归和CPS有理解的童鞋!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值