#include <stdio.h>
int fun (int n,int *s)
{ int f1,f2;
if(n==1//n==2) *s=1;
else
{ fun(n-1,&f1);fun(n-2,&f2);*s=f1+f2;}
}
main()
{ int x;
fun(6,&x);printf("%d\n",x);
}
以上程序的输出结果是多少?最好带上解题的思路,谢谢各位啦
{fun(n-1,&f1);fun(n-2,&f2);*s=f1+f2}是什么意思啊?麻烦帮忙解释下,谢谢啦
追答配合前边if……else……
如果n不为1,2的时候,那么就有了
f1为fun(n-1,*)
f2为fun(n-2,*)
{
fun(n-1,&f1); //f1为指针,改函数的返回值为f1
fun(n-2,&f2); //f2为指针,改函数的返回值为f2
*s=f1+f2 //把两个值相加给前边的作为返回值,因为s可以作为返回值
}
以6为例,6!=1 且6!=2
fun(6,*)=fun(5,*)+fun(4,*) //*表示指针,这个值可以返回值!真正的函数没有返回值。
一直下去,直到n=1,或者n=2的时候,就不再递归调用函数fun了。
fun(2,*)=1
fun(1,*)=1
这是因为函数中给出的if(n==1 || n==2) *s=1;//s作为返回值
可以把fun(6,*)=fun(5,*)+fun(4,*) 中的fun(5,*),fun(4,*)继续拆!直到fun(2,*),fun(1,*)
就得到了f(6,*)=5*f(2,*)+3*f(1,*)=5+3=8
fun(n-1,&f1)就是fun(n-1,&f1)?为什么啊?再帮下忙好么?谢谢啊
追答你问的什么啊!
fun(n-1,&f1)
看到&号了没有!,函数的参数是指针类型!
在函数内部有*s=1是吧,说的就是把s指的内存内容换为1!
所以f1的内容就换成1,所以函数fun(1,&f1);执行后,f1的值就变了!(这是当n=1,2时)
当其他情况也类似!只不过函数值是该函数的递归调用!
好好理解一下指针形参吧!