C++ 递归函数的转换

C++ 递归函数的转换,c++,C++,下面的程序是一个递归函数,它从两个正整数计算一个值 int riddle (int i, int j) { if (j==0) return i; return riddle(j, i%j); } 我想知道一个while循环如何在没有if语句的情况下将这个程序转换成一个非递归函数 非常感谢您的帮助假设i>j,您使用递归查找两个no.s的HCF的程序可以使用while完成。试试这个: int i=val1,j=val2; while (j != 0)

下面的程序是一个递归函数,它从两个正整数计算一个值

int riddle (int i, int j)
{
   if (j==0) return i;

   return riddle(j, i%j);
}
我想知道一个while循环如何在没有if语句的情况下将这个程序转换成一个非递归函数


非常感谢您的帮助

假设i>j,您使用递归查找两个no.s的HCF的程序可以使用while完成。试试这个:

int i=val1,j=val2;
            while (j != 0)
            {
                int t;
                t = j;
                j = i % j;
                i = t;
            }

首先,确定结束递归的条件,这将是结束
while
循环的条件

接下来,确定递归期间要执行的语句,这些语句将构成
while
循环的主体

最后,确定递归结束时要执行的语句,这些语句将在
while
循环之后立即执行

伪代码:

而执行递归的条件为true
{
执行递归期间要执行的语句
}
在退出递归时执行要执行的语句

将条件放在while语句中让他自己做作业它将始终返回您提供的值?请注意,这只起作用,因为这是一个尾部递归函数。如果不是,则需要使用本地堆栈来维护历史状态可转换为
int old_i=i;i=j;j=旧的_i%j;转到\u函数的\u开始\u。从技术上讲,你在这一点上做得很好,但你的老师可能会因为丑恶而扣分。:)谢谢你的帮助。这个程序运行得很好。因为我不擅长C++,我想知道你能解释它为什么工作吗?这是否意味着t作为本地栈来维护历史状态?抱歉4延迟响应,暂时看不到终端。递归程序只需在每次递归中继续为'j'的'i'值和'(prev i)%j'的'j'值赋值,直到从prev func调用传递的'i%j'的'j'值变为0。因此,主要条件是继续执行上述任务,直到不断变化的‘i%j’值变为0t'不是一个本地堆栈,它只是一个临时变量,在为其赋值“i%j”之前,您可以使用它来存储j的值。我不能直接使用I=j,因为在下一步中,j=I%j将给出错误的结果。把它和交换逻辑联系起来哦,我知道了。谢谢你的帮助。我不知道你是否真的理解我笨拙的解释(我不太擅长用“书面”来解释),但如果它对你有帮助,那么我很高兴。我很高兴:P