纠结很久的C语言函数题~~求好心高手详细点拨!!!追加悬赏!!
#include<stdio.h>intfun(intn,int*s){intf1,f2;if(n==1||n==2)*s=1;else{fun(n-1,&f1);fun...
#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); } 输出结果是_______
展开
1个回答
展开全部
输出答案为8
此为求斐波那契数列第n项的程序
首先值得注意的是fun函数有一个形参为指针变量,也就是地址传递,这种情况下调用的程序如果对形参进行了修改,返回后相应变量的值也会被修改。这个函数就是利用了指针的这一特性。这个函数虽然是void型不返回数值,却用*s这个指针变量传递着运算结果。
注意*s为指针运算,表示对s所指的变量进行存取等运算操作。
if
(n==1||n==2)
*s=1;表示这个数列第一项
第二项均为1
接下来的else语句中fun(n-1,&f1);表示将数列第n-1项运算的结果保存在f1变量中,fun(n-2,&f2);表示将数列第n-2项运算的结果保存在f2变量中,也许你会疑惑:你怎么知道这个形参是用来传递运算结果的?接下来的一句话说明了一切:*s=f1+f2;也就是说,这里数列的第n项为前面两项的数值和。
综上,此为求斐波那契数列第n项的程序
此为求斐波那契数列第n项的程序
首先值得注意的是fun函数有一个形参为指针变量,也就是地址传递,这种情况下调用的程序如果对形参进行了修改,返回后相应变量的值也会被修改。这个函数就是利用了指针的这一特性。这个函数虽然是void型不返回数值,却用*s这个指针变量传递着运算结果。
注意*s为指针运算,表示对s所指的变量进行存取等运算操作。
if
(n==1||n==2)
*s=1;表示这个数列第一项
第二项均为1
接下来的else语句中fun(n-1,&f1);表示将数列第n-1项运算的结果保存在f1变量中,fun(n-2,&f2);表示将数列第n-2项运算的结果保存在f2变量中,也许你会疑惑:你怎么知道这个形参是用来传递运算结果的?接下来的一句话说明了一切:*s=f1+f2;也就是说,这里数列的第n项为前面两项的数值和。
综上,此为求斐波那契数列第n项的程序
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询