【问题标题】:Taking input inside a recursive function (one time input on the first iteration) in c++在 C++ 中的递归函数中获取输入(在第一次迭代时输入一次)
【发布时间】:2021-09-19 04:56:14
【问题描述】:

到目前为止,对我来说,在递归函数中保留特定变量值的唯一方法是将其作为参数传递。但是这次我特别需要编写一个函数,它只接受两个整数作为参数,并在第一次迭代时接受一个字符串输入。

伪代码:

函数(int a,int b)

if a == 1 and b == 2 take a string as input

else // do something with that string and print it

我想出的代码:

void f(int a, int b)
{
    string s;
    if (a == 1 and b == 2)
    {
        cin >> s;
    }
    //do something with a, b and string
    //some recursive calls based on conditions
    /* for example */ 
    if (!(a == 3 and b == 6))
    {
        f(a + 1, b + 2);
    }
    cout << s << "\n";
}

//and then call this function in the main function as f(1, 2);     

我知道我的代码有什么问题,但我不明白如何解决它。有没有办法在递归函数中获取输入并在另一个递归调用中打印它的值?

【问题讨论】:

  • 作弊:如果您需要在第一个也是唯一的第一个递归上做一些事情,插入另一个函数来处理第一个情况。在您的情况下,f 要求输入字符串,完成工作的第一步,然后调用 f_inner 调用自身。如果您可以使用ff_inner 调用的另一个小函数来消除代码重复,那就去做吧。
  • 我不明白这个问题。在我看来,示例代码回答了这个问题。
  • 你知道static是什么意思吗?
  • @user4581301 我想我明白你想说什么,我会试一试。
  • 小心“用 a、b 做一些事情,并根据条件将一些递归调用串起来”,永远记得放一个终止条件。另外,如果解决了,请考虑stackoverflow.com/help/self-answer

标签: c++ function recursion


【解决方案1】:

简单的解决方案是使用“静态”变量而不是局部变量。根据给出的具体说明,不可能在函数之外全局声明变量,并且参数是固定的。通过简单地将字符串变量声明为静态,可以使其在连续调用之间保持其值。

所以只需将string s; 更改为static string s;

【讨论】:

  • @Bob__ 是的,这更准确。谢谢
【解决方案2】:

将变量s声明为全局变量。您无法在调用之外访问 s,因为它的作用域会在函数结束后立即被销毁。

【讨论】:

  • 这就是问题所在,变量不能事先声明,它必须在函数本身中。
猜你喜欢
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 2015-09-04
  • 1970-01-01
  • 2019-03-16
  • 2020-11-14
相关资源
最近更新 更多