java - 从递归到迭代

标签 java function recursion iteration

我有递归函数:

public static int fRek(int n) {         
    if (n <= 0)
       return 1;            
    else if (n == 1) 
       return 2;       
    else
       return 3 * fRek(n-2)-3;  
}

问题:如何在迭代中编写它?循环? 我有这个:

public static int fIter(int a) {
    int b = 1 ;
        if (a <= 0) return 1;           
        else if (a == 1) return 2;  
        for (int i = 1; i <= a; i = i+2) {            
              b = b * 3;            
              b = b - 3;        
        }        
        return b;    
    }
}

但它仅适用于偶数:a = 4,6,8,... 对于奇数,它无法正常工作,我不知道为什么

最佳答案

对于偶数,您的第二个算法将不起作用,因为在第一段代码中,该函数返回 2如果n == 1 :

else if (n == 1) 
   return 2;     

在你的第二个算法中,如果输入参数 a很奇怪,for 循环最终会将其减少到 1而不是0 ,从而使用 b=1 进行计算是不正确的。您应该使用b=2a 的情况下是奇怪的,并使用 b=1a 的情况下保持均匀。

此外,您应该使用 i=1 中的 for 循环而a是奇怪的并且 i=2a保持均匀。

关于java - 从递归到迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20548762/

相关文章:

java - HQL递归,我该怎么做?

java - 获取高阶函数中函数参数的名称

通过R中的函数用列中的数字字符替换字符串

php - 调用非对象的成员函数

python - 重写一个函数,该函数创建具有固定总和的数字组合作为生成器

javascript - 将对象的递归数组转换为javascript中的嵌套或递归对象

c++ - C++ 中的递归函数、 boolean 语句和输入

java - 更新 ArrayList 中匹配字母的所有实例

java - Java中如何提取一个字符串中的所有整数并转换为指定的char值?

c++ - 模板函数和 Const/NonConst 引用参数