首页 > 其他分享 >函数的递归操作

函数的递归操作

时间:2024-04-02 22:31:17浏览次数:22  
标签:return 函数 递归 int age char Fun 操作

函数自身调用自身的操作,称为函数的递归操作!
一般递归存在两个条件:
        1.递归的起始值( 需要看具体问题)
        2.递归的结束条件( 一定得有)

具体参考以下案例:

1.有五个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。
   问第4个人岁数。他说比第3个人大2岁。
   问第3个人,又说比第2个人大2岁。
   问第2个人,说比第一个人大2岁。
   最后问第一个人,他说是10岁。 
   请问第 5 个人多大?

#include <stdio.h>
int Fun(int n);
int main()
{
	int n=0;
	printf("请输入第几个人:\n");
	scanf("%d",&n);
	
	int age=Fun(n);
	printf("age=%d\n",age);
	return 0;
}

int Fun(int n)
{
	int age=0;
	if(n==1)
	{
		age=10;
	}
	else
	{
		age=Fun(n-1)+2;//函数的递归
	}
	return age;
}

 可以看到代码:age=Fun(n-1)+2;

当输入为n=5时,执行else语句中的 age=Fun(n-1)+2;此时为age=Fun(4)+2;而Fun(4)再次调用Fun函数,即n=4;

当n=4时,age=Fun(3)+2;->n=3,age=Fun(2)+2;->n=2,age=Fun(1)+2;->n=1,此时执行if(n==1)语句,得age=10;

返回到age=Fun(1)+2;等价于age=10+2=12;返回return;

返回到age=Fun(2)+2;等价于age=12+2=14;返回return;

返回到age=Fun(3)+2;等价于age=14+2=16;返回return;

返回到age=Fun(4)+2;等价于age=16+2=18;返回最后得return age,得到age=18.

参考下图:

        运行结果:

请输入第几个人:
5
age=18

2.用递归方法求n!。

#include <stdio.h>
/*
用递归方法求n!。
*/
int Fun(int n);
int main()
{
	int n=0;
	printf("请输入n:\n");
	scanf("%d",&n);
	
	int num=Fun(n);
	printf("%d!=%d\n",n,num);
	return 0;
}

int Fun(int n)
{
	int num=n;
	if(n>1)
	{
		num*=Fun(n-1);
	}
	else if(n==0)//考虑到n可能为0的情况
	{
		num=1;
		return num;
	}
	else
	{	
		return num;
	}
}

        运行结果:

请输入n:
5
5!=120
请输入n:
0
0!=1

3.递归实现字符串逆序输出

//递归逆序输出字符串
#include <stdio.h>
void Fun(char *p);
int main()
{
	char buf[32] = {0};
	gets(buf);//"hello"
	Fun(buf);
	return 0;
}
void Fun(char *p)
{
	if(*p == '\0')
	{
		return;
	}
	else
	{
		Fun(p+1);
		printf("%c",*p);
	}
}

         另一种更复杂的写法:

#include <stdio.h>
#include <string.h>
/*递归实现字符串逆序输出*/

void SwapFun(char *p);
int main()
{
	char buf[32]={0};
	printf("请输入字符串:\n");
	scanf("%s",buf);
	getchar();
	SwapFun(buf);
	printf("逆序输出:%s\n",buf);
	return 0;
}

void SwapFun(char *p)
{
	char tmp=*p;
	int n=strlen(p);
	*p=*(p+n-1);
	*(p+n-1)='\0';
	if(strlen(p+1)>=2)
	{
		SwapFun(p+1);
	}
	*(p+n-1)=tmp;
	return;
}

        运行结果:

请输入字符串:
hello
逆序输出:olleh

标签:return,函数,递归,int,age,char,Fun,操作
From: https://blog.csdn.net/2401_83703513/article/details/137292519

相关文章

  • day12- 函数
    我们学习编程的时候,一学到函数就感觉很难,其实函数很简单,听我给你细细道来,在我们之前的学习中,我们最常用的一个操作,打印输出print(),其实这就是我们最先接触的函数,只不过这是由Python源码中编写好的函数,那我们来看下print()函数到底是怎么写的?从中我们可以看到用到def关键字,然......
  • Java方法06:递归讲解
    递归1.A方法调用B方法,我们很容易理解!2.递归就是:A方法调用A方法!就是自己调用自己3.利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要......
  • iNeuOS工业互联网操作系统,“低代码”表单开发应用过程(一)
     iNeuOS工业互联网操作系统,“低代码”表单开发应用过程(一) 目      录1.     概述...22.     “低代码”表单开发应用过程...21.  概述    iNeuOS工业互联网操作系统“表单设计”功能经过升级后,能够适用于更多应用场景,从业务上来讲可以扩展设......
  • 粒子群算法(主要针对连续型函数优化问题)
    文章主要参考了以下博文:https://zhuanlan.zhihu.com/p/5648197181.简介粒子群算法是一种解决最优化问题的通用方法,其优点是求解速度快,数值相对稳定,算法简单。粒子群算法分为连续型粒子群算法和离散型粒子群算法,分别用于解决连续型问题和离散型问题。粒子群优化算法源自对鸟......
  • Java API操作ES
    1、项目搭建Elasticsearch软件是由Java语言开发的,所以也可以通过JavaAPI的方式对Elasticsearch服务进行访问。先IDEA开发工具中创建简单的javaseMaven项目(模块也可),如下:修改pom文件,增加Maven依赖关系如下:<dependencies><dependency><groupId>......
  • callback回调函数的使用
    callback回调函数的使用二、例子收拾二、例子收拾/**回调方法*/asyncfunctionsubmitForm(callback:(data:Record<string,string>[],callback:()=>void)=>void){loading.value=truecallback(formData,()=>{loading.value=false......
  • 函数或方法参数传递问题
    ★一般情况函数参数的传入顺序依次为:必备参数=>默认参数=>不定长参数=>关键字参数案例#函数传入参数顺序必备默认不定长defdouble_sum(x,y=88,*args,**kwargs):print(x)print(y)print(args)print(kwargs)double_sum(10,20,......
  • 07字符串内置方法_列表的内置方法_列表操作_字典的内置方法
    【一】字符串内置方法【1】find方法name="dreamHello"#默认是从左向右找并且返回当前字符在字符串内部的索引坐标print(name.find('d'))#0#默认只能找一次,找到了就不会再找下去了print(name.find('e'))#2#可以指定寻找的区间print(name.find('e',5,-1))#7......
  • ZCMU操作系统课程实验 - 实验1-Linux的使用
    登录1.打开这个东西2. 在  文件->打开    中打卡机房里VMOS文件里的这个东东 3.然后依次操作下去好了,有红色的选项,我都是选的"Donothing"。完成后就会出现这样一个黑框框。4.让你登录。输入:root。密码:superuser    。注意输入密码的时候,密......
  • 金蝶云星空表单插件:操作子单据体的删除触发父单据体的字段重算
    文章目录金蝶云星空表单插件:操作子单据体的删除触发父单据体的字段重算金蝶云星空表单插件:操作子单据体的删除触发父单据体的字段重算publicoverridevoidAfterDeleteRow(AfterDeleteRowEventArgse){base.AfterDeleteRow(e);if(e.EntityKey.Equals(as......