大家下午好呀,今天的分享就是我的作业啦,可能对一些大佬来说很基础,但是我经过综合多方意见,终于写出来啦
首先是题目
然后我们分析下这道题,一开始我是很懵逼的,不知道老师为啥要说有两个参数,我还在怀疑人生,一个正整数,为啥有俩参数,然后我还去问了老师,然后老师凶凶,我也没懂,哈哈哈
然后就自己琢磨,问问别的大佬,突然就灵光一闪,就get到老师给的提示啦。
其实我在很久之前就已经分享过用循环实现正整数的反序输出了,它们都有一个共同点,就是都要取模,然后又因为递归函数就是要实现自己调用自己,所以取模这个就可以作为一个很好的切入点。
然后我们是如何实现反序输出一个数的呢,就是用取模的数10加后来的数,一步一步往前挪,好比我输入:12,然后取模10,就是2,然后就是
2*10+1=21,就可以完美实现反序输出啦。
所以老师所讲的那个两个参数的意思就是,用其中一个来存放已经反序的数,另外一个就用来放你输入的数(还未反序的数)。
了解思路后,我就完美在递归函数那里卡住了,哈哈哈,给大家看看我的问题。
就是我发现我的返回值有问题,因为i=余数,但是我无法实现一步一步把它往前挪,这就导致了,我每次在下面调用自己的时候这个i一直都是一个数,无法*10。然后我问了我们系的大佬,才知道,其实可以在i那里修改一下,就可以避免了
但是我这样也有问题,我输入了123,只输出了3,而且不管我输入啥,都是第一个数,为什么呢,原因就是我在后面多加了一个return i;这个就会导致我最后一步返回值的时候,已经判断j==0了,这时候就不再需要继续执行,只要把这个321返回上一步,但是上一步我们还有这个return i,而此时的i 是120,就只会返回120,并且不会再次返回321了,以此类推,就只会输出第一次存在压栈的i,此时的i时第一次取模的数3。感觉我讲的很模糊,但是大家按着我之前分享的递归函数流程图画一次,可能比我干讲好。这是我画的很简单的流程图
有两个方法,可以解决这个问题。
1,因为一直在覆盖后来返回的数,我们可以设置一个中间变量,实现对返回值的存放就不会有影响啦
2,为什么会实现覆盖后来的数?就是因为我们多加的最后执行的语句,我们把它删掉,然后使它的返回值只有一个,就可以了。
好啦,今天的分享就到这里,我们明天见。