2021-05-22递归练习作

 

6-7 整数逆序输出 (100 分)

请写出将一个整数逆序输出的函数。

注意:此题要求递归求解且不允许使用数组。如果违反要求则没有分。

函数接口定义:

函数接口如下:
void reverse(int n) ;

其中 n 是用户传入的参数。 n 的值大于0且不超过int的范围; 函数的返回值为空,其功能是逆序输出 n。测试用例保证输入的n末尾不为0。

裁判测试程序样例:

函数被调用进行测试的例子如下:
#include <stdio.h>

void reverse(int n) ; 

int main()
{
    int     n;

    scanf("%d",&n);
    reverse(n) ;
    printf("\n");
    return 0;
}

/* 请在这里填写答案 */

输入样例:

1234

思路:

递归有两个关键:

1.递归式

2.递归边界

 

这里逆序输出,递归式可以想成 输出一个数+调用自己输出下一个数

边界就是n==0时结束

代码:

void reverse(int n){
    printf("%d",n%10);
    if((n=n/10)!=0){
        reverse(n);
    }
}

6-8 实验6_4_二进制转十进制 (100 分)

设计递归函数int convert(int n);用于将二进制数n转换为十进制数并返回。 递归函数设计思路与提示: 如将1101转换为十进制的形式:

1101=1 * 2​0​​ + 0 * 2​1​​ + 1 * 2​2​​ + 1 * 2​3​​ = 1101 % 10 + convert(110) * 2 ;

110 = 0 * 2​0​​ + 1 * 2​1​​ + 1 * 2​2​​ = 110 % 10 + convert(11) * 2;

11 = 1 * 2​0​​ + 1 * 2​1​​ = 11 % 10 + co

### 关于二叉树非递归遍历的题目与解法 #### 层序遍历作为非递归遍历的一种形式 层序遍历是一种基于队列的据结构来实现的方法,它按照层次顺序访问节点,即从根节点开始逐层向下扩展搜索[^2]。此方法非常适合用于解决特定类型的二叉树问题。 对于PTA平台上的习题而言,存在一道经典的例子:判断给定的一棵二叉树是否为完全二叉搜索树以及求解两个节点之间的最近公共祖先等问题都涉及到对二叉树进行有效的遍历操作。这些题目不仅考察了学生对于基本概念的理解程度,同时也测试了解决实际编码挑战的能力。 #### 实现非递归遍历的关键技术要点 当采用非递归方式完成二叉树遍历时,通常会借助栈或队列这样的辅助据结构来进行迭代处理: - **前序遍历** 和 **中序遍历**: 可以通过显式地维护一个栈来模拟函调用的过程; - **后序遍历**: 则相对复杂一些,可能需要用到额外的空间记录已经访问过的子树; - **层序遍历**: 使用队列保存待访问的节点列表,并依次取出当前节点并将其左右孩子加入到队列末端直至所有节点都被访问完毕。 下面给出一段Python代码片段展示如何利用队列执行简单的层序遍历: ```python from collections import deque def level_order_traversal(root): result = [] queue = deque([root]) while queue: node = queue.popleft() if not node: continue result.append(node.val) if node.left is not None: queue.append(node.left) if node.right is not None: queue.append(node.right) return result ``` 这段代码实现了最基本的层序遍历逻辑,适用于大多情况下验证理解或是初步学习阶段使用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值