【问题标题】:I want to do this code without using loop recursion method how to convert this to recursion我想在不使用循环递归方法的情况下执行此代码如何将其转换为递归
【发布时间】:2022-10-13 15:28:38
【问题描述】:

//I want to change this loop into recursion

Add_one(array);
for (j = 0; j < 4; j++)
   cout <<  array[j] << " ";

// function for adding 1 to each array elements

void Add_one(int arr[])

{
    int j;
    for (j = 0; j < 4; j++)
    arr[j]++;     
}

【问题讨论】:

  • arr4 长,这似乎是一个非常疯狂的假设。
  • 这毫无意义,看起来像是家庭作业。让我们先看看你对它的看法。
  • 你有两个代码 sn-ps,都使用循环。您要替换哪个循环?为什么?
  • 提示:您要么需要一个size_t 长度参数,要么需要一个“结束”指针来知道何时停止。如果可以,您还可以使用std::vector 和偏移索引。

标签: c++ arrays function recursion add


【解决方案1】:

告诉您的老师,通过递归执行此操作是一个愚蠢的主意,但无论如何您都可以这样做:

Demo

#include <iostream>

void Add_one(int (&arr)[4], size_t i=0)
{
    if (i < 4) {
        arr[i]++;
        return Add_one(arr, ++i);
    } else {
        return ;
    }
}


int main()
{
    int array[4] = {1,2,3,4};
    Add_one(array);
    for (size_t j = 0; j < 4; j++) {
        std::cout <<  array[j] << " ";
    }
}

感谢@Nathan 的提示:int (&amp;arr)[4]-Syntax 意味着我们通过引用获取数组。为此,编译器需要知道确切的长度(本例中为 4)。这样,我们可以直接使用通用语法更改数组值,而不是滥用指针(但无论如何编译器都会在我们背后这样做)。

Ofc 这仅适用于数组长度为 4 项的情况。您可以添加模板代码以使其适用于任意长度。

【讨论】:

  • 我对我的 C++ 很生疏。你能解释一下int (&amp;arr)[4]到底做了什么吗? [4] 在这种情况下在做什么?
  • 这将超出范围,您将致电Add_one(arr, 4)
  • 先生,这个作业是为了递归思考,这就是为什么我的老师要求我用递归而不是通常的迭代方法来做这件事。非常感谢您的帮助❤️?
  • 只需将其声明为void Add_one(int* arr, size_t i)
  • @Nathan C++ 允许您通过引用传递具有大小限制的数组
猜你喜欢
  • 2017-11-06
  • 2015-01-08
  • 2017-02-28
  • 1970-01-01
  • 2020-10-01
  • 2012-12-29
  • 2013-10-23
  • 2023-01-13
  • 1970-01-01
相关资源
最近更新 更多