Edinburge 发表于 2017-2-23 18:13:05

求助大神们

#include <stdio.h>
long fun(int g)
{

switch(g)
   {case 0:return 0;

          case 1:
          case 2:return 1;
   }
return (fun(g-1)+fun(g-2));
}
main()
{
long fib; int n;
printf("Input n:");scanf("%d",&n);printf("n=%d\n",n);
fib=fun(n);
printf("fib=%d\n\n",fib);
}
请问大神们此处的switch语句有什么用?我知道switch语句的定义,但是不知道在此处如何起到作用?特别是这句话return (fun(g-1)+fun(g-2));

hukaichunhu 发表于 2017-2-23 22:31:25

迭代

caokaifa 发表于 2017-2-25 13:29:40

这里的switch语句是当对应输入0-2,返回值相应的值,当输入为零返回0,当输入为1或2时,返回为1,当输入超过2,时,调用函数(fun(g-1)+fun(g-2))进行迭代。

kai759630 发表于 2017-3-6 16:59:57

首先这里fib应该是指Fibonacci即斐波那契数列,指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........这个数列从第3项开始,每一项都等于前两项之和。(这里都是我百度的哈哈)
下面是我的理解:你这个函数应该是实现:输入n,然后将第n个fib数列中的数输出出来。
首先第一个问题是这里switch的作用:这里的作用就和楼上说的一样,当g是0时函数返回值为0,当g为1或2时函数返回值为1,当g>2时,函数返回fun(g-1)+fun(g-2)。
第二个问题是fun(g-1)+fun(g-2)的意思:如上,当g>2时,函数返回fun(g-1)+fun(g-2),这里给g赋个值就好说明了,当g=4时,函数返回fun(3)+fun(2),则fib=fun(3)+fun(2);到这里又将3和2分别代入函数fun(),则fun(4)=fun(3)+fun(2)=(fun(2)+fun(1)+1)+1=1+1+1=3。
楼主没看懂这个函数应该是函数的嵌套调用没弄明白,再看看书吧(c语言谭浩强版185页),{:5_106:},我也是新手,一起加油吧!
页: [1]
查看完整版本: 求助大神们