有没有人告诉我这个程序什么意思#include<stdio.h> int fun(int n) {

有没有人告诉我这个程序什么意思#include<stdio.h>
int fun(int n)
{#include<stdio.h>
int fun(int n)
{
int p;
if(n==1 || n==2)
p=1;
else
p=fun(n-1)+fun(n-2);
return p;
}
main()
{
printf("%d",fun(20));
}

这个程序涉及到一个知识点:递归 â€”— å‡½æ•°è‡ªå·±è°ƒè‡ªå·±

int count = 1;

int fun(int n)
{
int p;
if (n == 1 || n == 2)
p = 1;
else
p = fun(n - 1) + fun(n - 2);

printf( "count = %d fun = %d\n", count ,p);
count++;
return p;
}

int main()
{
printf("main = %d", fun(20));

return 0;
}

这是一个嵌套循环在不断的执行,幸好你传值是20 ,要是数值大点话执行要很久,产生的数值都会超过int çš„取值范围。

我把你的代码改造了一下,多加了一行打印,你观察打印输出,就可以很清楚看到执行的过程。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-07-06

这个程序的功能是输出斐波那契数列的第20项。

斐波那契数列第1、2项都是1,从第3项开始,各项都等于它前面两项的和。

#include <stdio.h>
int fun(int n) //定义函数fun
{
int p;//定义变量p
if(n==1||n==2)//斐波那契数列第1、第2项都是1
p=1;//因此如果n是1或2,p的值是1
else//如果是斐波那契数列第3项以后的项
p=fun(n-1)+fun(n-2);//等于它前两项的和,递归调用函数fun,求出该项的值
return p;//返回斐波那契数列该项的值
}
main()
{
printf("%d",fun(20));//调用函数fun,输出斐波那契数列第20项的值
}

第2个回答  2019-07-15
#include<stdio.h>
int fun(int n,int *s)//递归算法计算斐波纳契数列
{
int f1,f2;
if(n==1 || n==2) // 如果是第一个或者第二个数,他们均为1
*s=1;
else
{
fun(n-1,&f1); // 递归计算前一个
fun(n-2,&f2); // 递归计算前两个位置的
*s=f1+f2; // 数列的定义就是当前位置是前两个数字之和
}
return 0;
}
int main()
{
int x;
fun(6,&x); // 看看数列第六个位置是不是8
printf("%d\n",x);
}
相似回答