算法强化训练专题1

强化训练专题1

递归逆序打印

作业代码需要放在word里面发给我以及运行的程序的截图

练习题1:使用前驱索引倒序打印数组

题目描述
给定一个整数数组和一个与之对应的“前驱索引”数组。每个位置的前驱索引表示在原数组中,当前元素之前的一个元素的位置。使用这个前驱索引数组,你的任务是倒序打印出原数组的元素,从最后一个元素开始追溯至第一个元素。请使用递归方法完成这个任务,不要使用循环结构,也不要使用全局或静态变量来存储结果。

示例输入

原数组:[5, 3, 4, 8, 6]
前驱索引数组:[-1, 0, 1, 2, 3]

示例输出

6 8 4 3 5

函数模板

#include <iostream>
#include <vector>
using namespace std;

void printWithPredecessor(const vector<int>& arr, const vector<int>& pred, int index) {
    // 你的代码
}

int main() {
    vector<int> arr = {5, 3, 4, 8, 6};
    vector<int> pred = {-1, 0, 1, 2, 3};
    printWithPredecessor(arr, pred, arr.size() - 1);
    return 0;
}

在这个练习中,printWithPredecessor 函数接收三个参数:整数数组 arr,前驱索引数组 pred,和一个表示当前要打印元素的索引 index。你需要实现这个函数,使其能够利用前驱索引数组,从给定的 index 开始,倒序打印原数组中的元素。

提示

  1. 递归的基本情况是当 index 为 -1 时,表示没有前驱元素,函数什么也不做直接返回。
  2. 在递归调用之前打印元素将影响打印的顺序,而你需要在恰当的时机调用递归函数以实现倒序打印。

这个练习将帮助你理解如何使用递归和前驱索引来遍历和操作数组。如果你需要更多帮助或有疑问,请随时提问!

练习题2:递归逆序打印字符串

题目描述
给定一个字符串,你的任务是使用递归方法逆序打印出字符串中的所有字符。请不要使用循环结构,也不要使用全局或静态变量来存储结果。

示例输入

字符串:"hello"

示例输出

"olleh"

函数模板

#include <iostream>
using namespace std;

void printReverseString(const string& str, int index) {
    // 你的代码
}

int main() {
    string str = "hello";
    printReverseString(str, str.length() - 1);
    return 0;
}

练习题3:递归逆序打印链表

题目描述
假设你有一个单向链表的元素数组和一个与之对应的“前驱索引”数组(由于你是小学生,我们不使用真正的链表,而是用数组模拟)。每个位置的前驱索引表示在链表中,当前元素之前的一个元素的位置。使用这个前驱索引数组,你的任务是倒序打印出链表的元素,从最后一个元素开始追溯至第一个元素。请使用递归方法完成这个任务,不要使用循环结构,也不要使用全局或静态变量来存储结果。

示例输入

链表元素数组:[4, 2, 5, 3, 1]
前驱索引数组:[-1, 0, 1, 2, 3]

示例输出

1 3 5 2 4

函数模板

#include <iostream>
#include <vector>
using namespace std;

void printLinkedListReverse(const vector<int>& list, const vector<int>& pred, int index) {
    // 你的代码
}

int main() {
    vector<int> list = {4, 2, 5, 3, 1};
    vector<int> pred = {-1, 0, 1, 2, 3};
    printLinkedListReverse(list, pred, list.size() - 1);
    return 0;
}

练习题4:递归逆序打印数字序列

题目描述
给定一个数字序列,你的任务是使用递归方法逆序打印出序列中的所有数字。请不要使用循环结构,也不要使用全局或静态变量来存储结果。

示例输入

数字序列:[1, 2, 3, 4, 5]

示例输出

5 4 3 2 1

函数模板

#include <iostream>
#include <vector>
using namespace std;

void printNumbersReverse(const vector<int>& numbers, int index) {
    // 你的代码
}

int main() {
    vector<int> numbers = {1, 2, 3, 4, 5};
    printNumbersReverse(numbers, numbers.size() - 1);
    return 0;
}

练习题5:递归逆序打印数组元素和它们的索引

题目描述
给定一个整数数组,你的任务是使用递归方法逆序打印出数组中的所有元素及其索引。请不要使用循环结构,也不要使用全局或静态变量来存储结果。

示例输入

整数数组:[10, 20, 30, 40, 50]

示例输出

元素:50,索引:4
元素:40,索引:3
元素:30,索引:2
元素:20,索引:1
元素:10,索引:0

函数模板

#include <iostream>
#include <vector>
using namespace std;

void printArrayElementsAndIndicesReverse(const vector<int>& arr, int index) {
    // 你的代码
}

int main() {
    vector<int> arr = {10, 20, 30, 40, 50};
    printArrayElementsAndIndicesReverse(arr, arr.size() - 1);
    return 0;
}
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天秀信奥编程培训

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值