首页 > 其他分享 >用递归函数实现反序输出正整数

用递归函数实现反序输出正整数

时间:2022-11-30 17:00:17浏览次数:34  
标签:取模 正整数 10 反序 递归函数 然后 返回值

大家下午好呀,今天的分享就是我的作业啦,可能对一些大佬来说很基础,但是我经过综合多方意见,终于写出来啦

首先是题目

用递归函数实现反序输出正整数_递归函数实现反序输出

然后我们分析下这道题,一开始我是很懵逼的,不知道老师为啥要说有两个参数,我还在怀疑人生,一个正整数,为啥有俩参数,然后我还去问了老师,然后老师凶凶,我也没懂,哈哈哈

用递归函数实现反序输出正整数_递归函数_02

然后就自己琢磨,问问别的大佬,突然就灵光一闪,就get到老师给的提示啦。

其实我在很久之前就已经分享过用循环实现正整数的反序输出了,它们都有一个共同点,就是都要取模,然后又因为递归函数就是要实现自己调用自己,所以取模这个就可以作为一个很好的切入点。

然后我们是如何实现反序输出一个数的呢,就是用取模的数10加后来的数,一步一步往前挪,好比我输入:12,然后取模10,就是2,然后就是

2*10+1=21,就可以完美实现反序输出啦。

所以老师所讲的那个两个参数的意思就是,用其中一个来存放已经反序的数,另外一个就用来放你输入的数(还未反序的数)。

了解思路后,我就完美在递归函数那里卡住了,哈哈哈,给大家看看我的问题。

用递归函数实现反序输出正整数_递归函数实现反序输出_03

就是我发现我的返回值有问题,因为i=余数,但是我无法实现一步一步把它往前挪,这就导致了,我每次在下面调用自己的时候这个i一直都是一个数,无法*10。然后我问了我们系的大佬,才知道,其实可以在i那里修改一下,就可以避免了

用递归函数实现反序输出正整数_递归函数_04

但是我这样也有问题,我输入了123,只输出了3,而且不管我输入啥,都是第一个数,为什么呢,原因就是我在后面多加了一个return i;这个就会导致我最后一步返回值的时候,已经判断j==0了,这时候就不再需要继续执行,只要把这个321返回上一步,但是上一步我们还有这个return i,而此时的i 是120,就只会返回120,并且不会再次返回321了,以此类推,就只会输出第一次存在压栈的i,此时的i时第一次取模的数3。感觉我讲的很模糊,但是大家按着我之前分享的递归函数流程图画一次,可能比我干讲好。这是我画的很简单的流程图

用递归函数实现反序输出正整数_递归函数_05

有两个方法,可以解决这个问题。

1,因为一直在覆盖后来返回的数,我们可以设置一个中间变量,实现对返回值的存放就不会有影响啦

用递归函数实现反序输出正整数_递归函数_06

2,为什么会实现覆盖后来的数?就是因为我们多加的最后执行的语句,我们把它删掉,然后使它的返回值只有一个,就可以了。

用递归函数实现反序输出正整数_递归函数实现反序输出_07

好啦,今天的分享就到这里,我们明天见。









标签:取模,正整数,10,反序,递归函数,然后,返回值
From: https://blog.51cto.com/u_15863860/5899987

相关文章

  • 占内存的递归函数
    描述对于一个递归函数w(a,b,c)如果a<=0 or b<=0 or c<=0就返回值1.如果a>20 or b>20 or c>20就返回w(20,20,20)如果a<b并且b<c 就返回w(a,b,......
  • 给定N(N<=100)个正整数,查找其中的最大值并输出。
    #include<stdio.h>#defineN100main(){ inta[N],n,i,max; printf("请输入N个数(N<=100):\n"); scanf("%d",&n);//输入的个数  for(i=0;i<n;i++) scanf("%d",&a[i......
  • C#--序列化和反序列化
    序列化是指将对象转换成字节流,从而存储对象或将对象传输到内存、数据库或文件的过程。它的主要用途是保存对象的状态,以便能够在需要时重新创建对象。反向过程称为“反序列......
  • 什么是递归函数
    递归函数:自己调用自己1.使用递归一定要有一个结束条件否则会出现栈溢出变成死循环成为死地归<body><script>//leti=0;//......
  • Fastjsonfan反序列化(1)
    前言之前只是对FastJson漏洞有简单的一个认知,虽然由于网上fastjson漏洞调试的文章很多,但是真正有着自己的理解并能清楚的讲述出来的文章少之又少。大多文章都是对已知的漏......
  • 序列化和反序列化
    一、序列化:将Java对象转换成字节流的过程序列化过程:是指把一个Java对象变成二进制内容,实质上就是byte[]。因为序列化后可以把byte[]保存到文件中,或者把byte[]通过网络传......
  • mysql jdbc反序列化利用
    参考资料https://www.anquanke.com/post/id/203086按照资料描述搭建环境,注意,如果使用8.0.28版本的mysql,服务端MySQL_Fake_Server会报错(ValueError('45isnotavalidCha......
  • Fastjsonfan反序列化(一)
    前置知识Fastjson是一个Java库,可以将Java对象转换为JSON格式,当然它也可以将JSON字符串转换为Java对象。Fastjson可以操作任何Java对象,即使是一些预先存在......
  • Java实体类为什么需要序列化和反序列化
    最近在学习做微服务的项目,在参考他人的微服务项目时,发现数据库表所对应的实体类都会实现Serializable接口,以往做的项目中并没有遇到过,也没有实现过这个接口,所以好奇实体类......
  • SpringMVC中LocalDate、LocalDateTime、LocalTime、Date的序列化与反序列化
    这是在使用SpringMVC时经常会遇到的日期类型转换,直接上代码:@ConfigurationpublicclassConverterConfig{privateLoggerlogger=LoggerFactory.getLogger(Converter......