Lintcode 用递归打印从1到N位的最大整数
2016-03-28 15:44
323 查看
题目要求用递归打印从1到N位的最大整数(十进制),如n=2 返回[1,2,…99].
实际上这道题是想让我们用全排列的思想分别按位进行递归,每位有0-9这十种可能。然而当用python写的时候不好用string类型存储数字,因为字符串不可改变。而用list存储数字的时候是酱紫的[1,9],对应数字19.然后还要对这个再进行处理。
所以干脆用最简单的数字,递增递归。(这样栈会爆,因为这是一个大数问题,python中栈有最大值,而且没有对尾递归做优化。然而我只是想用这个先打个样。)结果又出现了新的问题。发现我对递归的人是真是好模糊!对python的函数编程真的好浅薄!
怎么调试都是返回None!这是为什么呢?stackoverflow上有个人给出个写法:
哎他的怎么就可以呢?而且def函数可以嵌套,想起了保健哥的形式化方法的课,感觉学的东西又都还给他了。以前讲的Continuation和CPS以及高阶函数学好了感觉理解这个和递归就比较简单了:(
后来发现我上一个程序斜体的地方忘记写了return。这样每次到这里都调用自己做下一层递归(recursion函数),最后返回到最初调用recursion的函数numberByRecursion的时候虽然Recursion返回了Result,但是并没有人接,不仅没人接,numberByrecursion还没有return,那默认是返回None的,所以返回了None,而不是result 列表。
感觉对递归的理解不是很深。不知道上面的想法是否正确,欢迎明白的同学在评论下方发言指正!尤其是对递归和CPS有理解的童鞋!
实际上这道题是想让我们用全排列的思想分别按位进行递归,每位有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有理解的童鞋!
相关文章推荐
- Android开发需要的网站
- codeforces 652D Nested Segments
- JDBC连接数据库(http://www.cnblogs.com/hongten/archive/2011/03/29/1998311.html)
- 线条的属性
- AOP-面向切面编程——AspectJ
- 理解和正确使用Java中的断言(assert)
- 1000行代码写小游戏(一)
- SQL
- Unity和Android交互
- java类文件结构
- 77. Combinations
- 出差(三十三)
- lstm
- Linux系统脚本分析之rc.sysinit
- Android下Activity结束(finish())之后没有释放内存问题的解决方法
- AWS need configure region
- BZOJ 1210: [HNOI2004]邮递员
- Dubbo的学习与总结(二)- -使用Dubbo
- DOM节点的类型及指针
- 地理定位