读书人

函数递归的有关问题

发布时间: 2013-11-23 10:52:51 作者: rapoo

函数递归的问题
代码如下:

                                                                            
[解决办法]
将a设置为static变量就可以了
int a = 1;改为 static int a = 1

[解决办法]
把a和b一起传给函数
[解决办法]
引用:
把a和b一起传给函数
++
[解决办法]
引用:
Quote: 引用:

将a设置为static变量就可以了
int a = 1;改为 static int a = 1
静态变量不行


可以的吧! 静态变量!
传参数也行, 全局变量也行!
[解决办法]
静态变量,定义在递归函数内部时,无法多次初始化。
当其它函数,调用递归函数两次以上时,就会出问题。


[解决办法]
引用:
静态变量,定义在递归函数内部时,无法多次初始化。
当其它函数,调用递归函数两次以上时,就会出问题。

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

[解决办法]
其实可以写个函数,调用那个递归函数,外部不使用递归函数。

[解决办法]
另外这个函数,写的有问题
float res ;

res 没有初始化,a >= b 的时候,返回值不确定。
这应该不是,这个函数所需要的吧。


写成这样是否能达到你的目的?

float fun(int a,float b)
{
float res = 0;
float sqrt();
if (a < b)
res = sqrt(1 + (a + 1)* fun(a + 1,b));
else
return res;
}

读书人网 >C语言

热点推荐