递归算法中的变量问题(强人在哪呀)

来源:百度知道 编辑:UC知道 时间:2024/06/15 16:32:16
自己编写的一个函数
create bp(n)
{
int i;
int j;
i=...;
j=...;
.....create bp(m)
a(i);
b(j);
}
就是在递归调用函数create bp(m)的时候,原始函数create bp(n)中的i j 值已经改成了create bp(m)中的i j值,而我不希望改变,请问这种情况该如如解决。
问题补充:也就是 i j的值在内嵌调用 create(m)时,有一个值,但是我希望退出create(m)时,ij 的值为原先create(n)得值 ,该如何定义变量类型?
代码太长(做了部分修改)
double creatbp(int f_num)
{
double WW=0;
int i1=0;
int j1=0;
double w1=0;
double w2=0;
double c1=0;
int a=0;

if(a)
{
return 1.00;
}

else
{
j1=(LNODE+f_num)->foll;//此时j1=0
while ((LNODE+(LARC+j1)->end)->bp==0)
{
(LNODE+(LARC+j1)->end)->bp=creatbp((LARC+j1)->end);//调用后j1=2
}
w1=f(j1);
i1=(LARC+j1)->next;//此j1=2,而我希望今j1=0
while(i1!=-2)
{

#include <stdio.h>

void a(int x)
{
printf("i=%d\n",x);
}
void b(int x)
{
printf("j=%d\n",x);
}

void createbp(int n)
{
int i;
int j;
i=n+1;
j=n+2;
int m=i*j;
if(m>50) ;
else createbp(m);
a(i);
b(j);
}

void main()
{
createbp(1);
}
这段程序验证的结果是:
i=7
j=8
i=2
j=3
这里其实在退出create(m)时并没有把原始函数create bp(n)的ij改成create(m)的值,而显示的
i=7
j=8
是在调用create(m)时输出的值,而在退出create(m)之后,显示的
i=2
j=3
还是原始函数create bp(n)的ij值

一般不会出现你说的这种情况,肯定有别的什么错误。
你把源代码贴出来,就会有人给你找出来了。

不需要修改,原函数的运行过程就是这样的!

如果想让退出create(m)后,ij 的变为create(m)里面的值,则需要把i和j定义为表态变量static int i,j;