C语言:递归

递归简单来说就是函数自己调用自己。

特点:一般代码比较简洁,没有出口。

例子1:用一个函数计算阶乘

cpp 复制代码
#include<stdio.h>

//不用递归
int fac(int n)
{
	int val = 1;
	for (int i = 1; i <=n;i++)
	{
		val *= i;
	}
	return val;
}

//用递归
int fac1(int n)
{
	if (n == 1)
	{
		return 1;
	}
	return n * fac1(n - 1);
}


int main()
{
   
	printf("%d\n", fac(5));
	printf("%d\n", fac1(5));

	return 0;
}

例子2:斐波那契值

cpp 复制代码
#include<stdio.h>


//1 2 3 4 5 6 7  8   从第三个数开始,它的值等于它前两项的和
//1 1 2 3 5 8 13 21
//用递归
int fibonacci(int n)
{
	if (n == 1 || 2 == n)
	{
		return 1;
	}

	return fibonacci(n - 2) + fibonacci(n - 1);
}

//循环法
int fibo(int n)
{
	if (1 == n || 2 == n)
	{
		return 1;
	}
	int v1 = 1;
	int v2 = 1;
	int v3;
	for (int i=3;i<=n;i++)
	{
		v3 = v1 + v2;
		v1 = v2;
		v2 = v3;
	}
	return v3;
}

int main()
{
	
	printf("%d\n", fibo(40));
	printf("%d\n", fibonacci(40));


	return 0;
}

例子3:倒序打印

cpp 复制代码
#include<stdio.h>



void print(char* str)//abcd dcba倒序打印
{
	if (*str == '\0')
	{
		return;
	}
	print(str + 1);        //printf("%c", *str);此为正打印
	printf("%c", *str);    //print(str + 1);    abcd abcd
}

int main()
{
	
	print("abcd");

	return 0;
}
相关推荐
消失的旧时光-194313 分钟前
Spring Boot 实战(三):Service 分层 + 统一返回 + 异常处理(工程级写法)
java·spring boot·接口·解耦
云烟成雨TD14 分钟前
Spring AI Alibaba 1.x 系列【20】MessagesAgentHook 、MessagesModelHook 相关实现类
java·人工智能·spring
霸道流氓气质15 分钟前
SpringBoot中集成LangChain4j实现集成阿里百炼平台进行AI对话记忆功能和对话隔离功能
java·人工智能·spring boot·langchain4j
脱氧核糖核酸__19 分钟前
LeetCode热题100——41.缺失的第一个正数(题解+答案+要点)
数据结构·c++·算法·leetcode·哈希算法
脱氧核糖核酸__20 分钟前
LeetCode热题100——73.矩阵置零(题目+题解+答案)
c++·算法·leetcode·矩阵
weixin_4460235620 分钟前
C语言printf函数format参数输出格式及type、flags规定详解
c语言·详解·printf函数·格式参数·输出格式
XS03010621 分钟前
Java 基础笔记(二)
java·笔记·python
papaofdoudou23 分钟前
AMD-V 嵌套分页白皮书翻译
java·linux·服务器
Mr_Xuhhh23 分钟前
深入理解单链表的递归反转:从原理到实现
算法·leetcode·职场和发展
海寻山28 分钟前
Java 泛型 (Generic) 入门到精通:语法 + 原理 + 实战 + 避坑
java·windows·python