帮忙看个简单的程序 -【递归参数问题】

[复制链接]
查看11 | 回复3 | 2010-7-29 11:46:26 | 显示全部楼层 |阅读模式
#include
void matrix_power(unsigned long ,unsigned long,

unsigned long ,unsigned long,

int ,unsigned long *,unsigned long *,unsigned long *,

unsigned long *);
unsigned long fibonacci(int n)
{

unsigned long a,b,c,d;

if(n>1,&xa,&xb,&xc,&xd);

*aa=xa*xa+xb*xc;

*bb=xa*xb+xb*xd;

*cc=xc*xa+xd*xc;

*dd=xc*xb+xd*xd;

}
}
int main()
{

int x;

while(scanf("%d",&x)!=EOF)

{

x=fibonacci(x);

printf("%d",x);

printf("\n");

}

getch();

return 0;
}
我打注释的那个地方,n==1时,不是已经把那个*aa赋值了吗,为啥后面的*aa输出的值不对呢,那个xa,xb等却有值
不用看完,就看后面一点就行了,这程序挺短,就参数多了点,谢谢,好的话会追加的

回复

使用道具 举报

千问 | 2010-7-29 11:46:26 | 显示全部楼层
这个程序写得太绕了,不过总算看明白了。程序本身没有问题的。为什么*aa没有值呢?因为你自始至终都没有给fibonacci函数中的a,b,c,d赋过值.假如n=5,那么首先执行fibonacci函数中的matrix_power(3)。1.进入matrix_power函数,因为3&01==1,所以首先执行matrix_power(2)2.进入matrix_power(2)后,因为3&01!=1,所以执行matrix_power(1)3.进入matrix_power(1)后,对*aa进行了赋值。但是请注意,此时,是由matrix_power(2)中调用的matrix_power(1),matrix_power(1)中的*a
回复

使用道具 举报

千问 | 2010-7-29 11:46:26 | 显示全部楼层
感觉你这个递归写的有问题。while里面每次都得输入一个N的值,每次都是先进入fibonacci函数,然后每次都给matrix_power的参数值初始化了。造成了你的递归其实没有实现,每次就一遍又重新赋值了。至于那*aa值不对的问题,在n==1时赋值的时候,else if(n&0x01 == 1)这里面并不会执行。所以你n==1赋的值永远不会在else里
回复

使用道具 举报

千问 | 2010-7-29 11:46:26 | 显示全部楼层
你aa是赋值了没错,但是你在输出aa值之前又调用了一次matrix_power,这显然是递归调用,具体我也没仔细看,但aa的值一定改变了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则