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;
}
相关推荐
Nil2086 小时前
leetcode 46全排列
算法·leetcode·职场和发展
她的男孩6 小时前
同一个接口,为什么销售只看到自己的订单?我拆了 681 行数据权限拦截器的源码
java·后端·架构
卓怡学长7 小时前
w157基于springboot北部湾地区助农平台
java·spring boot·spring·maven·intellij-idea
小白羊丨7 小时前
问数 Agent 整体架构、意图识别、历史上下文与 NL2SQL
java·面试·架构
辰烨chenye7 小时前
LeetCode Hot 100 题解 · 动态规划篇
算法·leetcode·动态规划
Linux-lucky7 小时前
33-Linux学习之旅之MySQL用户管理
java·linux·运维·学习·mysql·ubuntu
SimonKing7 小时前
将cURL 命令直接变成 Java 代码?用JQuick-Curl搞起来
java·后端·程序员
凤山老林7 小时前
企业级文件服务中台:Spring Boot 集成 MinIO 实现分片存储、生命周期管理与多租户隔离
java·spring boot·后端·minio·文件服务
青山木7 小时前
Hot 100 --- 买卖股票的最佳时机
java·数据结构·算法·leetcode·贪心算法
程序员良辰7 小时前
Eclipse Memory Analyzer(MAT)入门教程:从生成 Heap Dump 到定位 Java 内存问题
java·ide·eclipse·tomcat·idea