java - 转换递归函数并更多地调用迭代函数java

标签 java recursion

有没有办法在不使用堆栈的情况下将这种递归算法转换为迭代算法?

public static float T1(int n, float y) {
    if (n == 0)
        return y;
    if (n == 1)
        return 1;

    return 2 * y * T1(n - 1, y) - T1(n - 2, y);
}

让我感到困惑的是递归内部有两个调用,而且我不知道如何使用循环进行转换。

最佳答案

这是一种使用 for 循环进行相同计算的方法。

public static float T1(int n, float y) {
    if (n==0) return y;
    if (n==1) return 1;
    float p1 = 1, p2 = y; // track the previous two values
    for (int i=2; i <= n; ++i) {
        float p = 2*y*p1 - p2; // calculate the result for this iteration
        p2 = p1; // update the previous values to be used in the next iteration
        p1 = p;
    }
    return p1;
}

关于java - 转换递归函数并更多地调用迭代函数java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37239709/

相关文章:

recursion - 正确的 Rust 匹配习惯用法

c - 在 C 中使用任意大小的 uint8_t 数组生成所有可能的二进制组合

java - 使用 Spring 测试框架模拟服务的预期结果

java - 这怎么违法

java - 基于 java 的应用程序的 Docker 镜像生命周期

java - 如果将 SharedPreferences 放在那里,代码将不起作用

php - 使用路径在 PHP 数组中进行递归搜索

java - 如何在android中修复libpng

java - 带有由组合填充的整数的 ArrayList 数组

c - 使用递归打印所有排列