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

2024-05-16 13:08

本文主要是介绍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位的最大整数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/994998

相关文章

Java实现预览与打印功能详解

《Java实现预览与打印功能详解》在Java中,打印功能主要依赖java.awt.print包,该包提供了与打印相关的一些关键类,比如PrinterJob和PageFormat,它们构成... 目录Java 打印系统概述打印预览与设置使用 PageFormat 和 PrinterJob 类设置页面格式与纸张

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

mysql递归查询语法WITH RECURSIVE的使用

《mysql递归查询语法WITHRECURSIVE的使用》本文主要介绍了mysql递归查询语法WITHRECURSIVE的使用,WITHRECURSIVE用于执行递归查询,特别适合处理层级结构或递归... 目录基本语法结构:关键部分解析:递归查询的工作流程:示例:员工与经理的层级关系解释:示例:树形结构的数

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法

《springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法》:本文主要介绍springboot整合阿里云百炼DeepSeek实现sse流式打印,本文给大家介绍的非常详细,对大... 目录1.开通阿里云百炼,获取到key2.新建SpringBoot项目3.工具类4.启动类5.测试类6.测

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

Jackson库进行JSON 序列化时遇到了无限递归(Infinite Recursion)的问题及解决方案

《Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursion)的问题及解决方案》使用Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursi... 目录解决方案‌1. 使用 @jsonIgnore 忽略一个方向的引用2. 使用 @JsonManagedR

Rust中的BoxT之堆上的数据与递归类型详解

《Rust中的BoxT之堆上的数据与递归类型详解》本文介绍了Rust中的BoxT类型,包括其在堆与栈之间的内存分配,性能优势,以及如何利用BoxT来实现递归类型和处理大小未知类型,通过BoxT,Rus... 目录1. Box<T> 的基础知识1.1 堆与栈的分工1.2 性能优势2.1 递归类型的问题2.2

如何提高Redis服务器的最大打开文件数限制

《如何提高Redis服务器的最大打开文件数限制》文章讨论了如何提高Redis服务器的最大打开文件数限制,以支持高并发服务,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录如何提高Redis服务器的最大打开文件数限制问题诊断解决步骤1. 修改系统级别的限制2. 为Redis进程特别设置限制