C语言,求教递归定义,随手写的代码,这算不算递归#include stdio.hvoid printfff(int, char)void main(){
C语言,求教递归定义,随手写的代码,这算不算递归
#include <stdio.h>
void printfff(int, char);
void main()
{
int i = 0;
char ch = 'a';
printfff(i, ch);
}
void printfff(int i, char ch)
{
i ++;
printf("%d\n", i);
if (i != 10)
{
return printfff(i, ch);
}
printf("%c\n", ch);
}
先说明,不加Return肯定就是递归无误
但是加了Return之后调用,只会输出最后一次调用的那一次‘a’,而不会想不加return那样输出十个'a'
我的观点是,这不能算严格意义上的递归,甚至不是递归
我朋友的观点是,函数直接或间接的调用了自己就是递归,这个测试程序就是递归
有没有对这方面有独到见解的,来说一下这到底是不是递归?
即使初涉递归,你觉得这是递归还是不是递归? C语言 递归 定义 测试实现
[解决办法]“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
·退出条件
·参数有哪些
·返回值是什么
·局部变量有哪些
·全局变量有哪些
·何时输出
·会不会导致堆栈溢出
http://www.codeproject.com/Articles/418776/How-to-replace-recursive-functions-using-stack-and
[解决办法]http://zh.wikipedia.org/wiki/%E9%80%92%E5%BD%92
对于递归的详细内容,参考资料《组合数学》中内容。
这是递归,深度是10
之所以输出一个a,因为
return printfff(i, ch);
有个return在头,所以深层调用返回来后函数就结束了
如果想每层调用都输出a,把return去掉即可
[解决办法]如果把 printf("%c\n", ch); 放到 if判断之前 估计又是另一番景象了 个人觉得 也算是递归
[解决办法]我对递归的理解:
1.先从函数的语意上来理解你自己写的递归程序,一个能正常工作的递归程序,必然是从语意上是说得通的.比如
printfff(int i, char ch) //这个函数的语意思是打印i次,字符ch.根据这个语意,我可以做出如下:
当i=0时,什么都不打印,直接return了.
当i>0时,先打印一次,然后再打印i-1次,即 printfff(i-1,ch)
以此来写递归,会感到很流畅
2.递归一定要有一个"出口点",不能无限递归.
[解决办法]是递归。。。
[解决办法]当然是递归了,只是前9次都被return掉了,所以才打印一个a罢了!
[解决办法]递归:自己调用自己,你说是不是?
前几次执行return 把函数都给结束了,肯定不会输出a 了!