C中的递归问题

在C语言中,所有的执行语句都只能出现在函数之中。同样,函数的调用也只能出现在某函数的函数体内。函数的调用以两种方式出现:函数的嵌套与函数的递归。  C语言中,所有函数的定义都是互相平行和独立的,一个函数的定义不能包含另一个函数的定义,即不允许函数的嵌套定义。但函数的调用可以通过用一个函数另一个函数来实现,这就形成了函数的嵌套定义!C语言不限制嵌套的个数和层数,这样我们就可以自由,合理的组织程序的模块结构

程序调用自身的编程技巧称为递归( recursion)。 

 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。 

 注意:  

(1) 递归就是在过程或函数里调用自身;  

(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口

(3)递归过程中必须要有逼近条件;


1fibonacci数列问题

#include<stdio.h>  
static long fibonacci(int n)  //内部函数  
{  
    if(n==1||n==2)  
        return 1;  
    else  
    {  
        return fibonacci(n-2)+fibonacci(n-1);  
    }  
}  
void main()  
{  
    int n,i;  
    printf("Input n.");  
    scanf("%d",&n);  
    for(i=1;i<=n;++i)/*列出每一项的值*/  
    {  
        printf("%ld",fibonacci(i));  
    }  
}  

递归方式按位输出一个整数

#include<stdio.h>

void print(int n)
{
	if (n != 0)
	{
		print(n / 10);
		printf("%d", n % 10);
	}
}
int main()
{
	int a = 12345;
	print(a);
	printf("\n");
	return 0;
	
}


但值得注意的是 递归在调用过程中伴随着压栈等操作 过多次的递归不想看起来代码量减少变简单,而是更加复杂了   通常在return阶段执行的递归操作被称为 尾递归 ,

尾递归可以用迭代方式进行替换  大大减少了内存的压力


fibonacci数列问题的非递归实现

int _fib(int n)
{
	int n1 = 1;
	int n2 = 1;
	int n3 = 0;
	if(n <= 2)
		return 1;
	else
		while(n>2)
		{
			n3 = n1 + n2;
			n1 = n2;
			n2 = n3;
			n--;
		}
	return n3;
}


  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值