gpt4 book ai didi

c - 在递归函数中使用 while 循环和 if 语句有区别吗?

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

我正在尝试使用递归函数来显示字母表中的字母。如果我在函数内使用 while 循环,程序就会永远持续下去。但是,如果我在该函数内使用“if”语句而不是 while 循环,则程序可以正常工作。根据我的直觉,我认为这些是相同的事情。谁能解释一下这是怎么回事?

#include<stdio.h>
void alpha(char c);
main()
{
alpha('A');
}
void alpha(char c)
{
while(c<='Z')
{
printf("%c",c);
alpha(c+1);
}
}
//This program never stops.

#include<stdio.h>
void alpha(char c);
main()
{
alpha('A');
}
void alpha(char c)
{
if(c<='Z')
{
printf("%c",c);
alpha(c+1);
}
}
//This works fine.

对于第一个代码,输出为 ABCDEFGHIJKLMNOPQRSTUVWXYZZZZZZZZ......(永远)。对于第二个代码,输出为 ABCDEFGHIJKLMNOPQRSTUVWXYZ。我希望这两个输出是相同的。

最佳答案

当使用 c='Z' 调用第一个版本时会发生什么:即:alpha('Z')?在下面的代码中:

while(c<='Z')        //Here you will loop forever because 'c' is not incremented
{
printf("%c",c); //This line will print 'Z'
alpha(c+1); //This line will call alpha('Z'+1) which will immediately
//return because the while loop in the next call frame
//prevents further execution
}

这就是为什么在最后一次递归调用时,当 c='Z' 时,您的程序将永远继续打印 'Z'

你可能想要

while(c<='Z')
{
printf("%c",c);
++c;
}

关于c - 在递归函数中使用 while 循环和 if 语句有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55522706/

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