我是靠谱客的博主 大力乌冬面,最近开发中收集的这篇文章主要介绍递归函数c语言递归与循环的区别,在递归函数中使用while循环和if语句之间有区别吗?...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我试图使用递归函数来显示字母表的字母。如果我在函数内部使用while循环,程序将继续运行。但是如果我在该函数内部使用“if”语句而不是while循环,则程序运行正常。根据我的直觉,我认为这些都是一样的。任何人都可以解释我发生了什么事吗?

#include

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

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

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

#include

#include

void alpha(char c);

int main()

{

alpha('A');

}

void alpha(char c)

{

while (c != toupper('Z'))

{

printf("%c ", c);

c++;

}

system("PAUSE");

}

最后

以上就是大力乌冬面为你收集整理的递归函数c语言递归与循环的区别,在递归函数中使用while循环和if语句之间有区别吗?...的全部内容,希望文章能够帮你解决递归函数c语言递归与循环的区别,在递归函数中使用while循环和if语句之间有区别吗?...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部