C语言递归和非递归实现斐波那契数

本文介绍了递归的概念,并通过斐波那契数列的递归和非递归实现来阐述如何使用递归。递归实现中强调了递归出口的重要性,非递归实现则通过定义三个变量进行累加。

  什么是递归?怎么使用递归?

       反复调用自身这就是递归。多做题,多总结,自然而然就会使用。

       这对很多像我这样的初学者来说,都觉得它很难很难。其实,在我看来,你多做一些递归这样的题,去发现里面的规律,就可以很快的理解递归,并能基本掌握在什么时候使用递归。

//递归实现斐波那契数 

    斐波那契数是1,1,2,3,5...
    规律:前两两项之和等于后一项即n = (n - 1) + (n - 2)

    解题思路:1>  使用递归必须分清自己的出口,不然出现死循环。根据题意,当n等1、2时

                            返回1,这就可以作为递归的出口。

                      2>  再使用递归反复调用自己(例如此题:开始n=5,调用自己一次,分别产生

                             n=4,n=3,分别表示n的前一项和前二项,依次往下走第四项又会产生它的

                             前一项和前二项,最后走到return 1后,依次返回直到返回到最后一个Fe

                             ibo函数,然后返回计算结果。)

   源代码:

#include<stdio.h>
#include<stdlib.h>

//递归实现求第n个斐波那契数。 
//斐波那契数是1,1,2,3,5...
//规律:前两两项之和等于后一项即n = (n - 1) + (n - 2)

int FeiBo(int n)
{
	if (n == 1 || n == 2)
	{
		return 1;
	}
	return FeiBo(n - 1)+FeiBo(n - 2);
}
int main()
{
	printf("%d\n", FeiBo(5));
	system("pause");
	return 0;
}

运行结果:

                      

  //非递归实现斐波那契数

      解题思路:1>  因为1,2项为1,所以单独处理;

                        2>  需要定义三个变量分别存放第n项,第n-1项,和第n-2项,是这三个变量

                              实现累加;

                        3>  返回运算结果,并输出。

  源代码:

#include<stdio.h>
#include<stdlib.h>

//非递归实现斐波那契数

int FeiBo(int n)
{
	int i = 0;
	int ret = 0;
	int n1 = 1;
	int n2 = 1;
	if (n == 1 || n == 2)
	{
		return 1;
	}
	for (i = 2; i < n; ++i)
	{
		ret = n2 + n1;
		n1 = n2;
		n2 = ret;
	}
	return ret;
}

int main()
{
	printf("%d\n", FeiBo(5));
	system("pause");
	return 0;
}

   //运行结果:

                                        

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值