C语言函数的递归调用

13 篇文章 1 订阅
5 篇文章 1 订阅

一,

1,递归的基本概念:
程序调用自身的编程技巧称为递归。递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似较小的问题来求解,递归策略只需少量的程序可描述出解题过程所需要的多次重复计算,大大的减少了程序的代码量。
2,递归的主要思考方式在于:大事化小
3,递归的两个必要条件

  • 存在限制条件,当满足这个限制条件的时候,递归不在继续。
  • 每次递归调用之后越来越接近这个限制条件。

二,示例1

利用递归求100以内所有数相加之和

#include<stdio.h>
int digui(int n);//递归函数的函数说明
int main()
{
	int i=100;
	int ret =digui(i);//ret等于函数的返回值
	printf("一百以内所有数字之和为%d",ret);//结果为5050
	return 0;	
}
int digui(int n)
{
	if(n>=1)
	 {
		return n+digui(n-1)
	 }
	else
		return 0;
}

上述递归调用分解过程分解

  • 第一步:先进行digui(100)然后100>=1,return 100+digui(100-1)(返回100+digui(100-1)函数)
  • 第二步:再进行digui(99)然后99>=1,return 99+digui(99-1)(返回99+digui(99-1)函数)
  • …原理同上
  • 第一百步先进行digui(1)然后1>=1,return 1+digui(1-1)(返回1+digui(1-1)函数,digui(0)的返回值为0
  • 之后将0带回第一百步的digui(1-1)函数中,再将1+0带回函数digui(1)中去一直带回到digui(100)=100+99+98+…+1+0=5050

示例2

用递归方法打印出斐波拉契数列
什么是斐波拉契数列?
例如:
1 1 2 3 5 8 13 21 34 55…像这样从第三项起每项都等于前两项相加之和的数组成的数列叫作斐波拉契数列

#include<stdio.h>
int feibolaqi(int n);//斐波拉契数列递归函数的函数说明
int main()
{
	int i;
	int test;
	scanf_s("%d",&i);//输入你想知道斐波拉契数列中的第n个数,n最好不要超过40不然计算机运算压力太大可能会运行不出来
	test = feibolaqi(i);
	printf("\n第%d个数为%d",i,test);
}
int feibolaqi(int n)//n表示斐波拉契数列中的第n个数
{
	if(n > 2)
		return feibolaqi(n-1) + feibolaqi(n-2);
	else
		return 1;
}

上述递归调用分解过程
例如要想知道第10个数则:

  • 先**feibilaqi(10)**进入函数后因为10>2所以返回(return) feibolaqi(9)+feibolaqi(8)
  • 然后分别求feibolaqi(9)和feibolaqi(8)又由于9>2所以feibolaqi(9)的返回为feibolaqi(8)+feibolaqi(7),feibolaqi(8)的返回也是同理可求
  • 一直这样求下去,由于feibolaqi(1)和feibolaqi(2)的返回值都为1所以可求得feibolaqi(3)的返回值为feibolaqi(2)+feibolaqi(1)=2,同理也可以求出feibolaqi(4)的返回值,一直递归回去最终可以得出feibolaqi(10)的返回值

总结:感觉递归过程就像一个反复调用自身的过程,直到调用到无法调用之时,在沿原路返回
如有补充或者不同观点欢迎在评论区留言!!!
互相学习,互相进步!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值