读书人

关于递归的疑点

发布时间: 2013-08-14 14:27:55 作者: rapoo

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




是的!
[解决办法]
正确。
表达式作为函数参数的话,传入的是表达式的值。
[解决办法]
引用:
// value(list, i+1, n);

i = i+1;
value(list, i, n);

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

list[i] = 'F';
value(list, i+1, n);

[解决办法]
引用:
// value(list, i+1, n);

i = i+1;
value(list, i, n);

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



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

[解决办法]
在递归中不同 传入i+1是在下一个stack frame 中的变量 i增加了1
i = i + 1 是在本stack frame 中的变量 i增加了1,特别是后面还用了变量 i 的值
[解决办法]
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
退出条件
参数有哪些
返回值是什么
局部变量有哪些
全局变量有哪些
何时输出


会不会导致堆栈溢出

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

读书人网 >C语言

热点推荐