您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 关于递归的疑问

关于递归的疑问

来源:网络整理     时间:2016/6/23 22:13:51     关键词:

关于网友提出的“ 关于递归的疑问”问题疑问,本网通过在网上对“ 关于递归的疑问”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 关于递归的疑问
描述:

请问else里面的注释是否理解的正确?我应该怎么理解:

value(list, i+1, n);

void value (char *list, int i, int n)
{
int j;
if (i==n+1) /*已经递归完毕, 输出序列*/
{
for (j=0; j<=n; j++)
{
printf("%c", list[j]);
}
printf("     ");
}
else 
{
list[i] = 'T';
value(list, i+1, n);
/*
value(list, i+1, n);
等同于:
i = i+1;
value(list, i, n);
*/ 
list[i] = 'F';
value(list, i+1, n);
}
}

解决方案1:

引用 3 楼 shiguojie19892 的回复:
// 		value(list, i+1, n);
i = i+1;
value(list, i, n);

改变了写法后,程序能编译但是会崩溃,为什么呢?

list[i] = 'F';
value(list, i+1, n);
解决方案2:

正确。
表达式作为函数参数的话,传入的是表达式的值。

解决方案3:

画图最容易理解!递归可以使用广义表表示
((((。。。)(。。。))((。。。)(。。。)))(((。。。)(。。。))((。。。)(。。。))))

解决方案4:

“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
·退出条件
·参数有哪些
·返回值是什么
·局部变量有哪些
·全局变量有哪些
·何时输出
·会不会导致堆栈溢出

解决方案5:

 在递归中不同 传入i+1是在下一个stack frame 中的变量 i增加了1
i = i + 1  是在本stack frame 中的变量 i增加了1,特别是后面还用了变量 i 的值 

解决方案6:

引用 3 楼 shiguojie19892 的回复:
// 		value(list, i+1, n);
i = i+1;
value(list, i, n);

改变了写法后,程序能编译但是会崩溃,为什么呢?


i= i+1 ;
list[i] = 'F';//多次调用i = i +1, 是不是导致数组越界了?
解决方案7:

 关于递归的疑问
是的!


以上介绍了“ 关于递归的疑问”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2016144.html

相关图片

相关文章