递归时如何保存中间参数的值

sunrisefe 2007-11-02 08:08:21
下在的一个递归中,如何使else主体中的四个递归函数的randomVal值保持一致?谢谢
void mountainGen(int num,double a1x,double a2x,double a3x,double a4x)
{
if(num==0)
{
//连接各点
}
else
{

randomVal=rand();//产生随机数

mountainGen(num-1,a1x,0.5*(a1x+a2x),0.25*(a1x+a2x+a3x+a4x)+randomVal,0.5*(a1x+a4x));

mountainGen(num-1,0.5*(a1x+a2x),a2x,0.5*(a2x+a3x),0.25*(a1x+a2x+a3x+a4x)+randomVal);

mountainGen(num-1,0.5*(a2x+a3x),a3x,0.5*(a3x+a4x),0.25*(a1x+a2x+a3x+a4x)+randomVal);

mountainGen(num-1,0.5*(a3x+a4x),a4x,0.5*(a1x+a4x),0.25*(a1x+a2x+a3x+a4x)+randomVal);

}
}
...全文
872 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ningxi_ 2011-01-21
  • 打赏
  • 举报
回复
遇到同样的问题,该如何保证每一层同一个变量的值不一变呢?即,怎么保证退出一层时,变量的值回到该层的值呀?
Newton_Einstein 2008-08-27
  • 打赏
  • 举报
回复
在证递归过程中,怎么保证退出一层时,变量的值回到该时的值呀?
wa_ning1982 2007-11-06
  • 打赏
  • 举报
回复
学C无止境,作的不错,我感觉也就是定义一个局部变量,调用就可以了.
羽中漫步 2007-11-06
  • 打赏
  • 举报
回复
void mountainGen(int num,double a1x,double a2x,double a3x,double a4x)
{
if(num==0)
{
//连接各点
}
else
{
unsigned int randValG , randValT ;
randomVal=rand();//产生随机数
randValG = randomVal ;//此局部变量只会在此函数体有效,递归后又会定义

mountainGen(num-1,a1x,0.5*(a1x+a2x),0.25*(a1x+a2x+a3x+a4x)+randValG ,0.5*(a1x+a4x));
mountainGen(num-1,0.5*(a1x+a2x),a2x,0.5*(a2x+a3x),0.25*(a1x+a2x+a3x+a4x)+randValG );
mountainGen(num-1,0.5*(a2x+a3x),a3x,0.5*(a3x+a4x),0.25*(a1x+a2x+a3x+a4x)+randValG );
mountainGen(num-1,0.5*(a3x+a4x),a4x,0.5*(a1x+a4x),0.25*(a1x+a2x+a3x+a4x)+randValG );
}
}
juicee 2007-11-04
  • 打赏
  • 举报
回复
你用的是值传递,执行第一个递归调用的时候并没有改变randomVal以及任何一个入参,第二次第三次使用的还是原始值。如果你的结果有问题,那么问题也肯定不是出在randomVal不一致上。
sunrisefe 2007-11-04
  • 打赏
  • 举报
回复
麻烦哪位高手,把上面的参数和函数进出栈的顺序给出来一下,谢谢
dranyu 2007-11-03
  • 打赏
  • 举报
回复
每调用一次mountainGen函数randomVal的值就会改变一次。
你可以在函数的外边声明和定义randomVal.
也就是技术庸人说的:global var
tdcr5 2007-11-03
  • 打赏
  • 举报
回复
4个递归函数里的randomVal已经是一致的了,
如果用指向randomVal的指针做为函数参数传递或者用全局变量,4个randomVal才会不一致
g961681 2007-11-03
  • 打赏
  • 举报
回复
global var
sunrisefe 2007-11-03
  • 打赏
  • 举报
回复
这里产生的是随机数,要保证产生的一个随机数,对本级的四个自身调用时值一样,我上面的方法不能保证传值一致。
sunrisefe 2007-11-03
  • 打赏
  • 举报
回复
我的那代码生成的图显示随机变量值在同一级时也在变化。如何将图片上传上来啊,插入图片里是:http://,我怎么从硬盘上传上来
g961681 2007-11-03
  • 打赏
  • 举报
回复
#define MAX_DEPTH 20
unsigned int ulStackDepth = 0;
bool bNeedPop = false;

void CStackTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
m_lstStack.ResetContent();
AfxMessageBox("Are you ready?");
ulStackDepth = 0;
bNeedPop = false;
StackTest();
}

int CStackTestDlg::StackTest()
{
unsigned int ulTest = 0;
char buf[128];

ulStackDepth++;
sprintf(buf, "[%08d]Address:0x%08x", ulStackDepth, &ulTest);
m_lstStack.AddString(buf);

if ((ulStackDepth > MAX_DEPTH) || (bNeedPop == true))
{
bNeedPop = true;
return 0;
}
else
{
return StackTest();
}
}
jlu3389 2007-11-03
  • 打赏
  • 举报
回复
用数组
g961681 2007-11-03
  • 打赏
  • 举报
回复
那就局部变量,你的代码就可以了。
局部变量就是会在函数调用的时候压栈的。
youyifang 2007-11-03
  • 打赏
  • 举报
回复
用全局变量拉,这样就可以了啊。
sunrisefe 2007-11-03
  • 打赏
  • 举报
回复
我没有把问题说清楚,我的本意是每一级递归产生一个随机数,这个随机数用在上面的四个自身调用函数上,下一级时又产生一个随机数用在下一级。因为是递归,第一个递用自身的函数会先执行,再会执行第二个、三个、四个,所以才导致产生的随机数在调用每个函数时不一致。不知道这个情况怎么解决,主要是我对递归入栈不太熟、
t88266236 2007-11-02
  • 打赏
  • 举报
回复
值传递不是已经保证一致了吗?
星羽 2007-11-02
  • 打赏
  • 举报
回复

作成参数传进去

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧