c++ - 如何计算递归函数?

标签 c++ recursion factors

这是我的代码,用于打印除数,然后打印给定数字的除数。

现在假设我有 2 个测试用例:5 和 8;此代码将 5 计数为 2,将 8 计数为 6(即它添加了先前的计数)。

即使我将其声明为 int count = 0;,它也会返回相同的输出。

当我在函数 factors 中声明 int count = 0 时出现另一个问题。

对于所有情况,代码给出的计数都为 0。

#include<iostream>
using namespace std;
int count;
long long factors(long n, long f=1)
{


    if(n%f==0) {
        cout << f << endl;
        count++;
    }

    if(f==n) {
        return 0;
    }

    factors(n,f+1);

    return count;

}

int main()
{
    int n;
    int t;
    cin >> t;
    while(t--)
    {
        cin >> n;
        cout << factors(n) << endl;
    }


    return 0;
}

最佳答案

使用全局变量通常不是一个好主意。它在递归函数中尤其糟糕,递归函数最好是可重入的。当然,您可以通过重置循环中的计数来修复您的函数,如下所示:

while(t--)
{
    cin>>n;
    count = 0; // Reset count before the recursive call
    cout << factors(n) << endl;
}

您还可以制作 factors 重置 count 的“包装器”,以使调用者无需在调用 之前重置 count >因素,像这样:

long long factors(long n) {
    count = 0;
    return factors(n, 1);
}
long long factors(long n,long f /* Remove the default */) {
    ... // the rest of your code
}

关于c++ - 如何计算递归函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19744953/

相关文章:

r - 当 `unlist()` 或 `flatten()` 为列表时缺少因子

c - 递归斐波那契程序的时间复杂度

LINQ递归函数?

java - 我将如何使用多个数组列表来过滤数字的因子?

c++ - 在内部, vector 的 vector 如何扩展? C++

c# - 递归循环驱动器并替换非法字符

r - 在不破坏类型的情况下计算组合

c++ - 函数可以访问传递给 main() 的参数吗?

c++ - 更好地理解 makefile - 在这种情况下如何生成 .o 文件

c++ - 理解值绑定(bind)器