C语言_函数递归举例

2023-11-15

1.递归和非递归分别实现求第n个斐波那契数。

//求第 n 个斐波那契数
#include <stdio.h>
#include <stdlib.h>

int Fib1(int n)
{
	if (n == 1 || n == 2)
	{
		return 1;
	}
	return Fib1(n - 1) + Fib1(n - 2);
}

int Fib2(int n)
{
	if (n == 1 || n == 2)
	{
		return 1;
	}
	int num1 = 1, num2 = 1,result = 0;
	for (int i = 3; i <= n; i++)
	{
		result = num1 + num2;
		num1 = num2;
		num2 = result;
	}
	return result;
}

int main()
{
	printf("%d\n", Fib2(40));
	printf("%d\n", Fib1(40));
	return 0;
}

2.编写一个函数实现n^k,使用递归实现。

//求n^k
#include <stdio.h>
#include <stdlib.h>

int Mi(int n,int k)
{
	if (k == 0)
	{
		return 1;
	}
	return n * Mi(n, k - 1);
}

int main()
{ 
	printf("%d\n",Mi(5,3));
	return 0;
}

3. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和。

例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19。

//求一个非负整数的各数位之和
#include <stdio.h>
#include <stdlib.h>

int DigitSum(int n)
{
	if (n > 9)
	{
		return n % 10 + DigitSum(n / 10);
	}
	return n;
}

int main()
{
	printf("%d\n", DigitSum(1729));
	return 0;
}

4. 编写一个函数reverse,实现将参数字符串中的字符反向排列,不能使用C函数库中的字符串操作函数。

//将字符串中的字符反向排列
#include <stdio.h>
#include <stdlib.h>

void reverse(char* str)
{
	char* first = str;
	while (*str != '\0')
	{
		str++;
	}
	while (str != first)
	{
		str--;
		printf("%c", *str);
	}

}

int main()
{
	char str[] = "hello";
	reverse(str);
	printf("\n");
	return 0;
}

5.递归和非递归分别实现strlen。

//将字符串中的字符反向排列
#include <stdio.h>
#include <stdlib.h>

void reverse(char* str)
{
	char* first = str;
	while (*str != '\0')
	{
		str++;
	}
	while (str != first)
	{
		str--;
		printf("%c", *str);
	}

}

int main()
{
	char str[] = "hello";
	reverse(str);
	printf("\n");
	return 0;
}

6.递归和非递归分别实现求n的阶乘。

//求n的阶乘
#include <stdio.h>
#include <stdlib.h>

int Factorial1(int n)
{
	if (n == 1)
	{
		return 1;
	}
	return n*Factorial1(n - 1);
}

int Factorial2(int n)
{
	int result = 1;
	for (int i = 1; i <= n; i++)
	{
		result = result * i;
	}
	return result;
}

int main()
{
	printf("%d\n", Factorial1(5));
	printf("%d\n", Factorial2(5));
	return 0;
}

7.递归方式实现打印一个整数的每一位。

//打印一个整数的每一位
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

void digit(int n)
{
	if (n > 9)
	{
		digit(n / 10);
	}
	printf("%d\n", n % 10);
}

int main()
{
	int n = 0;
	printf("请输入一个整数:\n");
	scanf("%d",&n);
	digit(n);
	return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言_函数递归举例 的相关文章

随机推荐

  • Java循环for, while和do...while&break,continue,return

    为什么80 的码农都做不了架构师 gt gt gt Java有非常灵活的三循环机制 可以使用以下三种循环之一 while 循环 do while 循环 for 循环 从Java5 增强的for循环中进行了介绍 这主要是用于数组 while
  • go中make和new的用法,以及nil用法

    看如下代码 package main import fmt unsafe func main make和new函数 new函数用法 a 10 默认值 int rune byte float bool string这些类型都有默认值 指针 切
  • 多进程和多线程的差别(优缺点)

    多进程 多线程 目录 一 多线程的优点 二 多进程的优点 目录 对于问多进程和多线程之间的差别的问题 其实我们只要表明我们所知道的多进程和多线程各自的优点就可以了 一 多线程的优点 1 线程间通信会更加灵活 包括进程间通信在内还可以使用全变
  • Python基于Scapy的抓包协议分析器

    环境 py3 8 原理 模仿wireshark 利用python的scapy模块下的sniff 函数进行数据的抓取 并进行所谓的 消费者处理 即跟据OSI网络协议模型进行协议分析 将整个程序精简的概括得到最关键的一句代码 sniff prn
  • 企业商家怎么做小程序商城?

    自小程序商城的出现 帮助了很多企业商家打破了传统线下卖货的瓶颈 打通了线上卖货的渠道 为企业商家带来销售额的提升 当然还没入局的企业商家趁现在也可以做自己的小程序商城 在线上流量中分一杯羹 那么下面说说企业商家怎么做小程序商城 一 准备好小
  • JSP-内置对象

    response动态响应的例子 response重定向的例子 通过session对象来保证 在不同页面跳转时是同一个用户
  • ehcache缓存过期时间和注解的使用。

    一 过期时间的测试 我们配置一个spring整合ehcache的例子 使用自动注解缓存的方式 进行测试 timeToIdleSeconds表示最大空闲的时间 timeToLiveSeconds表示最大存活时间 例1 结果 5秒间隔内不过期
  • 学成在线网页制作(详细)

    项目分析 如图 分为四个模块 header头部模块 精品推荐模块 编程入门模块 数据分析师模块 机器学习模块 前端工程师开发模块 footer模块 如果仔细观察的话 第2 5 6属于一个模块 样式结构相同 同样的3 4模块相同 这样只要做出
  • linux gdb 不捕获SIGPIPE信号的方法

    gdb stops at SIGPIPE By default gdb captures SIGPIPE of a process and pauses it However some program ignores SIGPIPE So
  • 【⑯MySQL

    前言 欢迎来到小K的MySQL专栏 本节将为大家带来MySQL存储过程与函数概述 创建 调用 查看 修改 删除 争议的分享 目录 前言 1 存储过程概述 2 创建存储过程 3 调用存储过程 4 存储函数的使用 5 存储过程和函数的查看 修改
  • a-descriptions-item描述列表点击按钮显示相应内容

    实现功能 点击查询按钮 显示相应数据 部分数据只读 部分数据可修改 实现思路 首先通过点击按钮事件从接口获取内容 然后通过 显示在界面上 查询按钮触发事件代码 searchQuery var that this getAction this
  • 【数据库1】win10系统下,MySQL数据库安装环境搭建

    一 MySQL下载 登录MySql网站 https www mysql com MySql官方网站 下拉页面至最末端 如图 选择downloads里面的 Mysql community server 链接 进入下载页面 如图 根据个人系统情
  • MATLAB 图像处理 灰度图 将图像中某一行或者某一列的灰度值 绘制成一条曲线

    将这些灰度值保存成一个矩阵A A imgdata 1 第一列的所有数据 若是仅仅画数据 直接用plot A 例子如下 filename I jpg imgData imread filename imshow imgData 该函数可以用来
  • Libev事件库源码阅读笔记

    Libev事件库源码阅读笔记 Intro Libev是一个基于Reactor模式的事件库 效率较高 Benchmark 并且代码精简 4 15版本8000多行 是学习事件驱动编程的很好的资源 本文不会介绍Reactor模式 也不会介绍Lib
  • Windows 下如何使用管理员的身份运行 DOS 窗口

    如图 有时候我们使用命令行会发现类似上面的错误 这是因为我们没有使用管理员的身份运行 DOS 窗口导致的 那么如何解决 解决办法 先关闭命令提示符 然后打开电脑的系统盘C盘 打开路径 C Windows System32 然后在右上角的搜索
  • 数据倾斜

    数据倾斜发生时的现象 1 绝大多数task执行得都非常快 但个别task执行的极慢 2 原本能正常执行的Spark作业 某天突然爆出OOM 内存溢出 异常 观察异常栈 是我们写的业务代码造成的 数据倾斜发生的原理 在进行shuffle的时候
  • Python 文件读取的4种方式

    对于Python程序员来说 读取文件是一项基本操作 Python提供了多种读取文件的方式 以下是其中的4种常用方式 1 使用 open 函数和 read 方法 使用 open 函数和 read 方法是最基本的文件读取方式 它可以读取整个文件
  • mysql中的/、div的区别

    运算符为实数除 其运算的结果为实型 div为整除 该运算符只取商的整数部分 而不会四舍五入 网上说要求除数和被除数均为整形 经我测试 网上的说法有误 mysql gt select 100 22 div 2 1 100 22 div 2 1
  • WinServer 2012 R2 AD 组策略 将域用户加入本地管理员组

    需求 域用户shihua ma添加入到本地管理员组 先查看本地管理员组 net localgroup administrators 通过以上得知 shihua ma这个域用户不在本地管理员组 下面介绍如何将域用户自动加入到本地管理员组 一
  • C语言_函数递归举例

    1 递归和非递归分别实现求第n个斐波那契数 求第 n 个斐波那契数 include