在递归函数中使用while循环和if语句之间有区别吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在递归函数中使用while循环和if语句之间有区别吗?相关的知识,希望对你有一定的参考价值。
我试图使用递归函数来显示字母表的字母。如果我在函数内部使用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'
调用第一个版本时会发生什么:ie: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;
}
如果满足条件,if
区块的主体将只运行一次,而while
的主体将在条件成立时运行多次。在这种情况下:
while(c<='Z')
{
printf("%c",c);
alpha(c+1);
}
你在循环中检查c
的值。由于c
永远不会改变,循环永远不会结束。
你的第二个程序是处理递归函数的正确方法。除非满足某些条件,否则不会递归调用该函数,如果满足,则会在递归调用完成后返回递归调用。
调用while循环时不需要调用递归函数,它们将完全像if-block代码一样运行
#include<stdio.h>
void alpha(char c);
main()
{
alpha('A');
}
void alpha(char c)
{
while(c<='Z')
{
printf("%c",c);
c= c+1;
}
}
现在你的代码为什么在无限循环中进行扩孔是因为当while(c<='Z')
be在递归调用之后变为false时它将返回到先前的调用(即当c=='Z'
)并且随着c
从不递增,它将保持在无限循环中。
我相信在%c之后你需要一个空格它是一个缓冲区。每次使用循环时都需要增量器。 if语句将运行一次并关闭程序,while循环将使其无限运行,除非满足退出条件。
#include<stdio.h>
#include <stdlib.h>
#include <ctype.h>
void alpha(char c);
int main()
{
alpha('A');
}
void alpha(char c)
{
while (c != toupper('Z'))
{
printf("%c ", c);
c++;
}
system("PAUSE");
}
以上是关于在递归函数中使用while循环和if语句之间有区别吗?的主要内容,如果未能解决你的问题,请参考以下文章
python:while循环中的b/w multi-ifs和if-elif-else的区别