gpt4 book ai didi

c - 如何将迭代代码更改为递归代码?

转载 作者:行者123 更新时间:2023-11-30 17:25:45 25 4
gpt4 key购买 nike

int findnumb(int max)
{
int left,right,total,desk;
for(total=2; total<=max; total++)
{
for(desk=1; desk<total; desk++)
{
left=desk*(desk-1)/2;
right=(total*(total+1)/2)-(desk*(desk+1)/2);
if(left==right)
{
printf("Desk number %d, number of participants %d\n", desk, total);
break;
}
}
}
}

如何将其变成递归函数?

它在这种形式下工作得很好,但是当我尝试将其更改为递归函数时,它可以编译,但无法正常工作,我该怎么办?

编辑:

这是一个像这样的谜语:

假设有一个 session ,但我们不知道有多少人参加。然而,我们看到一名男子退出了 session 。如果我们问这个人有多少人出席 session 时他只是回答“我不知道”。尽管如此,他说“我坐在一把编号为 x 的椅子,我下面和上面的数字之和等于。其他换句话说,如果椅子的编号是 x,则 1,2,3….x-1 = x+1 x+2 …...t-1,t(总计参与者人数)。此外,我们不知道 t 的值和椅子编号 x。参与者总数为 8,主席编号为 6 是示例配置。因为1+2+3+4+5 = 7+8 = 15。你的任务是通过一一尝试找到相似的配置。

它想要实现递归函数的解决方案

第二次编辑:

现在我已经生成了一个代码,可以找到数字并立即崩溃,为什么会发生这种情况?

这是代码和崩溃的屏幕截图 http://imgur.com/a/UgZgC

最佳答案

每次迭代中需要更改的变量都需要是参数,并且您需要忠实于函数方法,因此您应该返回结果而不是打印:

int findnumb_aux(int max, int total, int desk)
{
if( total > max ) {
return 0; // need to return something when no solution exist
} elseif( desk < total ) {
int left=desk*(desk-1)/2;
int right=(total*(total+1)/2)-(desk*(desk+1)/2);
if(left==right) {
return desk<<8+total; // there are better ways to return two numbers. you figure it out
} else {
return findnum_aux(max, total, desk+1);
}
} else {
return findnum_aux(max,total+1, 1);
}
}

int findnum(int max)
{
return findnum_aux(max, 2, 1);
}

有趣的事实:此代码仍然是迭代的,因为如果您的 C 编译器具有 tail call optimization,它就不会增加堆栈 .

关于c - 如何将迭代代码更改为递归代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26989689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com