#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时)
当其他情况也类似!只不过函数值是该函数的递归调用!
好好理解一下指针形参吧!
一道c语言问题,请各位高手们帮帮忙,谢谢
char p[][20]={“get”,”put”,”out”};p是一个有3个元素的数组,数组中的每个元素都是一个char[20]类型的数组。也就是说,p是一个二维数组。strlen(p[0])+strlen(p[1])+ strlen(p[2])即计算p中的三个字符串的长度总和,为3+3+3=9。
C语言高手,帮帮忙
然后在执行i=st%i,因为初值i=10,经过执行第一句后st=75,所以i=75%10 ,所以是5 (8) !(非) &&(且) ||(或)(9) 1,2,3 因为if的条件是a>c,那么要当a>c成立的时候,才执行后面的语句,但是初值给出了a=1,c=3,所以,不执行后面的语句,所以还是现实原来的值 (10)x=0;...
c语言编程题,请高手帮忙做一下,拜谢,急急急急……
int count;for (count = 1; count <= 4*n-1; count+=4){ back += (double)1\/count;} for (count = 3; count <= 4*n-1; count+=4){ back -= (double)1\/count;} return 4*back;} 2.include <stdio.h> define LEN 3 define N 30 \/\/ \/\/ 结构定义 \/\/ typedef struct st...
一个奇怪的C语言问题,涉及到指针、数组、堆栈、以及printf,希望C语言大...
数组空间也被释放),printf占用了栈,所以,把原来函数f的栈空间内容修改了。所以,第一条printf语句是可以得到结果的。后面因为arr空间的内容已经被修改,所以,之后的printf语句都得不到结果。顺便再解释一下printf("%s\\n",p);得到的为什么是乱码。正如上面所说,先计算参数p的值保存栈顶。保存的值...
请各位C语言高手帮忙解决下面的问题。
int binary_find(int * a, int target, int low, int high){ if (low > high){ return -1;} else if (a[(low + high)\/2] == target){ return (low + high)\/2;} else if (a[(low + high)\/2] > target){ return binary_find(a, target, low, (low + high)\/2 - 1)...
一个有关C语言(数据结构)程序设计题 高手请帮忙,高分!
int Locate(MGraph G,char c){ for(int i=0;i<G.vexnum;i++)if(G.vexs[i]==c) return i;return -1;} \/\/创建无向网 void CreateUDN(MGraph &G){ int i,j,w,s1,s2;char a,b,temp;printf("输入顶点数和弧数:");scanf("%d%d",&G.vexnum,&G.arcnum);temp=getchar(); \/\/...
一个关于c语言中输入的问题,求高手帮忙!
换成如下代码就行了:include<stdio.h> define N 20 void main( ){ int n,k,i,j,ik;double m,t,max,a[N][N],b[N];printf("输入阶数n:\\n");scanf("%d",&n);printf("\\n输入二维数组a:\\n");for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%lf",&a[i][j]);printf("...
C语言编程求助!!!求高手帮忙!感激不尽!
include "stdio.h"include"string.h"int main(){ int i,s = 0; \/*请修改此处:int和i间有空格; 计算的和值s首先要清零 *\/ char str[80];i=0;while ((str[i]=getchar())!='\\n')i++;str[i]='\\0';for(i=0;i<80;i++)if (str[i]>='0' && str[i]<='9') \/*...
请高手用C语言帮忙做个编程的题目,谢谢了!
int IsDevided(int number,int dev){ if(number %dev == 0){ return 1;} return 0;} void EasyDone(int a){ int chose;int i,j;printf("Input your chose\\n1>能被3整除的"<Enter 1>","\\n2>能被5整除的<Enter 2>","\\n3>能被3或5整除的<Enter 3>\\n");scanf("%d",&chose)...
一道C语言编程问题,高手们来看看帮忙解答下
int c;int sum;\/\/ABC之和。for (a = 100;a > 0;a--)\/\/以A为循环变量,在1到100之间。{ for (b = a-1;b > 0;b--)\/\/以B为循环变量,在1到A之间。{ for (c = b-1;c > 0;c--)\/\/以C为循环变量,在1到B之间。{ \/\/判断公式左右两侧是不是相等,相等侧符合题目要求 if...