本文主要是介绍Lintcode 用递归打印从1到N位的最大整数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目要求用递归打印从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 herelargest = pow(10,n)-1i = 1*self.recursion(i,largest,result)*def recursion(self,num,largest,result):if num > largest:print 'num = ',numreturn resultresult.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 resultreturn recursion(n,largest,result)
哎他的怎么就可以呢?而且def函数可以嵌套,想起了保健哥的形式化方法的课,感觉学的东西又都还给他了。以前讲的Continuation和CPS以及高阶函数学好了感觉理解这个和递归就比较简单了:(
后来发现我上一个程序斜体的地方忘记写了return。这样每次到这里都调用自己做下一层递归(recursion函数),最后返回到最初调用recursion的函数numberByRecursion的时候虽然Recursion返回了Result,但是并没有人接,不仅没人接,numberByrecursion还没有return,那默认是返回None的,所以返回了None,而不是result 列表。
感觉对递归的理解不是很深。不知道上面的想法是否正确,欢迎明白的同学在评论下方发言指正!尤其是对递归和CPS有理解的童鞋!
这篇关于Lintcode 用递归打印从1到N位的最大整数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!