【问题标题】:Using an array from main in a recursive function在递归函数中使用 main 中的数组
【发布时间】:2022-01-27 18:06:46
【问题描述】:

作为问题的一部分,我需要在字符串上创建一个递归函数。
其中一部分基于斐波那契的第 n 个元素。
问题是我需要将 n(元素的数量)作为输入,然后才能创建数组。
但我还需要创建一个必须使用数组的递归函数。
我想将数组作为参数添加到函数中,但我不确定这是否会降低函数的效率。
所以以防万一:有什么方法可以在 c++ 的函数中使用该特定数组? 我这样计算数组:

#include <bits/stdc++.h>
using namespace std;



char IOI(int n,int k) {
    if (n<3) {
        return n;
    }
    if (k<=fibo[n-2]) {
        return IOI(n-2,k);
    }
    else {
        return IOI(n-1,k-fibo[n-2]);
    }

}

int main() {
    int n,k;
    cin >> n >> k;

    int fibo[n+1];
    fibo[0] = 0;
    fibo[1] = 1;
    for (int i = 2; i<n; i++) {
        fibo[i] = fibo[i-1]+fibo[i-2];
    }

    cout << IOI(n,k)


【问题讨论】:

  • 函数参数也需要类型。只需将您的函数参数定义为数组,例如)fn(int array[]),就可以了。哦,一定要传递大小,因为它实际上只是传递 int*。如果要循环遍历数组,则需要传递数组的大小。
  • 是的,但是每次调用函数时将数组作为参数传递会不会很慢?
  • 它实际上是在传递 int*,如果你的数组当然是整数
  • 看起来您是从另一种语言进入 C++ 或试图从竞赛网站上发布的代码中学习 C++。这是一条艰难的旅行之路。不同的语言做不同的事情,竞争代码的目标是赢,而不是教。我强烈建议先从a few good books 学习基础知识。
  • 你永远不需要包含比特/任何东西

标签: c++ arrays function memory scope


【解决方案1】:

有什么方法可以在 c++ 的函数中使用该特定数组?

是的。使用某种形式的间接将数组作为参数传递。通常,这将使用span 类型的参数来完成。


cin >> n >> k;
int fibo[n+1];

这是不允许的。在 C++ 中,数组变量的大小必须是编译时常量。

为了使用动态大小的数组,必须动态分配数组。最方便的解决方案是使用std::vector

【讨论】:

    【解决方案2】:

    cin >> n >> k;
    int * fibo = new int[n+1];

    可以动态创建数组;

    char IOI(int * fibo, int n,int k) {
    ...
    }

    你可以添加数组作为函数参数。

    【讨论】:

      猜你喜欢
      • 2020-09-09
      • 2012-12-06
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      相关资源
      最近更新 更多