用函数递归调用,输出斐波那契数据前n项的值

文章介绍了如何用C语言编写一个名为fib的递归函数,来计算斐波那契数列的前n项。递归函数的基本思想是当输入m为1或2时返回1,否则返回fib(m-1)和fib(m-2)的和。通过递归调用,可以计算任意项的值,例如计算fib(5)的过程被详细阐述。
摘要由CSDN通过智能技术生成

编写函数fib(),通过函数的递归调用,输出斐波那契数据前n项的值。

我的方案:

#include <stdio.h>
int fib(int m);
main()
{
	int i,n;
	printf("请输入数列的项数:");
	scanf("%d",&n);
	for (i=1;i<=n;i++)
	{
		printf("%d,",fib(i));
	}

}
/**********Program**********/
//1 1 2 3 5 8 13 21 34...	
//观察发现fib(m)的前一项为 fib(m-1) 前二项为 fib(m-2) 
//等于 fib(m-1)+ fib(m-2)= fib(m)
int fib(int m)		
{				
	if(m == 3)
		return 2;
	else if(m < 3)
		return 1;
	else if(m > 3)
		return (fib(m-1)+fib(m-2));
}

/**********  End  **********/

new bing的方案:

//定义fib函数
int fib(int m) 
{
	//递归的终止条件,第一项和第二项都为1
    if (m==1 || m==2) 
        return 1;
        
    else
        return fib(m-1)+fib(m-2); //递归公式,第m项等于前两项之和
}

new bing的方案2:

//定义fib函数
int fib(int n) 
{
  if (n == 0) return 0;
  if (n == 1) return 1;
  return fib(n-1) + fib(n-2);
}

fib函数的过程是这样的:

  • 首先,判断m是否为1或2,如果是,就直接返回1,因为这是斐波那契数列的前两项。
  • 如果m不是1或2,就说明m大于等于3,那么就需要用递归的方法计算第m项的值。
  • 递归的方法就是调用fib函数本身,但是参数不同。具体来说,就是调用fib(m-1)和fib(m-2),分别计算第m-1项和第m-2项的值,然后把它们相加,得到第m项的值。
  • 这样,fib函数就可以不断地调用自己,直到遇到终止条件(m为1或2),然后返回结果。

举个例子,假设我们要计算fib(5),也就是斐波那契数列的第五项。那么fib函数的过程如下:

  1. fib(5)不满足终止条件(5不等于1或2),所以需要递归调用。
  2. fib(5) = fib(4) + fib(3),所以需要先计算fib(4)和fib(3)。
  3. fib(4)也不满足终止条件(4不等于1或2),所以需要递归调用。
  4. fib(4) = fib(3) + fib(2),所以需要先计算fib(3)和fib(2)。
  5. fib(3)也不满足终止条件(3不等于1或2),所以需要递归调用。
  6. fib(3) = fib(2) + fib(1),所以需要先计算fib(2)和fib(1)。
  7. fib(2)满足终止条件(2等于2),所以直接返回1。
  8. fib(1)满足终止条件(1等于1),所以直接返回1。
  9. fib(3) = fib(2) + fib(1) = 1 + 1 = 2,所以返回2。
  10. fib(2)满足终止条件(2等于2),所以直接返回1。
  11. fib(4) = fib(3) + fib(2) = 2 + 1 = 3,所以返回3。
  12. fib(3)已经计算过了,结果为2。
  13. fib(5) = fib(4) + fib(3) = 3 + 2 = 5,所以返回5。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值