通过递归反转整数顺序

Posted

技术标签:

【中文标题】通过递归反转整数顺序【英文标题】:Reverse Order Of Integer By Recursion 【发布时间】:2019-06-25 01:49:20 【问题描述】:

“编写一个递归函数,获取一个整数作为输入(不以0开头)并以相反的顺序返回整数。

例如:58347 返回为 74385

指针、数组、内存分配是不允许的”

int reverse(int num);

我们必须知道整数的“长度”,可以不用全局变量吗?

也许是一些按位运算?

我的尝试:

int reverse(int num)
    int temp;
    if(num/10 == 0)
        return num;
    else
      return num%10*10+reverse(num=/10)

【问题讨论】:

不需要长度。您所需要的只是简单的十进制整数算术(更具体地说,使用10 进行除法和取模)。 十进制表示,我们得到 1234 并返回 4321 为什么不试一试,贴一些代码,我们会帮你解决你发现的任何问题。 【参考方案1】:

(不以0开头)

鉴于提供的函数原型,我不确定问题在这里试图暗示什么。

我们必须知道整数的“长度”

不,不需要知道整数的长度。

可以不用全局变量吗?

是的,当然。你应该得到整数的单位(即最小值的数字,例如1234中的4),提取它(例如获取123)并继续递归直到数字为0

也许是一些按位运算?

不,除法 (/) 和模数 (%)。

【讨论】:

但是我需要将反向数字作为整数返回,如何保存每个模后得到的“碎片”? 通常,您将递归编码为另一个函数(这样您就可以根据需要拥有尽可能多的参数来保存“片段”),并且原始函数将使用正确的初始设置调用该递归函数.【参考方案2】:

我不会为你做作业,但我会给你一些提示:

    n % 10 运算将为您提供以 10 为基数的整数表示中的最低有效位。 使用整数除法,循环中的条件n /= 10 最终将始终为假 (0),并将数字的基数为 10 表示中的最低有效位更改为第二个最低有效位. 将累加器变量乘以 10 将为另一个数字创建“空间”。

【讨论】:

3 是我在“我们必须知道整数的“长度””中的意思 @gbox 不,我写的都没有暗示你需要事先知道整数的长度。 能否请您详细说明 3,好的,我看到我们计算了对函数的调用次数 你从你想要反转的 int 中得到下一个数字。您将其存储在(最终)返回值中。要将此数字添加到数字中,请先将其乘以 10,然后再添加新数字。 所以如果我们有 123,我们得到 30,然后是 20,然后是 1

以上是关于通过递归反转整数顺序的主要内容,如果未能解决你的问题,请参考以下文章

反转链表递归迭代

反转链表递归迭代

反转链表递归迭代

递归-反转单链表 -图解

递归-反转单链表 -图解

Day4-快速排序和反转整数