当前位置:网站首页>C语言练习题(递归)
C语言练习题(递归)
2022-07-04 05:47:00 【小突突~】
目录
5.编写一个函数 reverse_string(char * str)(递归实现)
6.写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
1.接受一个整型值(无符号),按照顺序打印它的每一位。
例如:
输入:1234,输出 1 2 3 4
思路:我们应该想的是print函数可以把每一位给打出来。这样就会有下面这一系列的思考。
print(1234)
print(123)4
print(12)3 4
print(1)2 3 4
#include <stdio.h>
void print(int n)
{
if (n > 9)
{
print(n/10);
}
printf("%d ", n % 10);
}
int main()
{
unsigned int num = 0;
scanf("%d", &num);//1234
print(num);
return 0;
}2.编写函数不允许创建临时变量,求字符串的长度。
我们的函数每次是要求字符串长度的,传进去的参数只是字符数组的首地址而已,那我们就将首个字符的长度算出来,然后逐一去递归。
my_strlen("abcd")
1 + my_strlen("bcd")
1+1+my_strlen("cd")
1+1+1+my_strlen("d")
1+1+1+1+my_strlen("")
int my_strlen(char* str)
{
if (*str != '\0')
{
return 1 + my_strlen(str+1);
}
else
return 0;
}
int main()
{
char arr[] = "abcd";
int len = my_strlen(arr);
//len = strlen(arr);
printf("%d\n", len);
return 0;
}3.求n的阶乘。(不考虑溢出)
思路:n的阶乘 = n*(n-1)*(n-2)........*1;而我们定义的fac函数就是求阶乘的,所以只要每次将n的值传进去即可。
int fac(int n)
{
if (n <= 1)
return 1;
else
return n * fac(n - 1);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = fac(n);
printf("%d ",ret);
return 0;
}4.求第n个斐波那契数。(不考虑溢出)
思路:斐波那契数列:1 1 2 3 5 8 13 21 34 55......而我们可以根据这个特性,写出数学表达式。然后写出代码即可。

int fib(int n)
{
if (n <= 2)
return 1;
else
return fib(n - 1) + fib(n - 2);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = fib(n);
printf("%d ", ret);
return 0;
}5.编写一个函数 reverse_string(char * str)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
比如 : "abcdef" 变成 "fedcba"
思路:每次调用 reverse_string函数的时候,先将字符串首尾两个字符交换,但要注意末尾的字符需要填充字符‘\0’,因为要得出新字符串的末尾位置。
#include <stdio.h>
#include <string.h>
void reverse_string(char* str)
{
int len = strlen(str);
char tmp = *str;
*str = *(str + len - 1);
*(str + len - 1) = '\0';
if (strlen(str + 1) >= 2)
reverse_string(str + 1);
*(str + len - 1) = tmp;
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}6.写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
输入:1729,输出:19
思路:和第一题的思路大致相同。
#include <stdio.h>
int DigitSum(int n)
{
if (n > 9)
return (n % 10) + DigitSum(n / 10);
else
return n;
}
int main()
{
int num = 0;
scanf("%d", &num);
int ret = DigitSum(num);
printf("%d\n", ret);
return 0;
}7.编写一个函数实现n的k次方,使用递归实现。
思路:注意k的取值即可。
double power(int n, int k)
{
if (k > 0)
return n * power(n,k - 1);
else if(k == 0)
return 1;
else
return 1.0 / power(n, -k);
}
int main()
{
int n = 0;
int k = 0;
scanf("%d %d", &n,&k);
double ret = power(n, k);
printf("%.1f\n", ret);
return 0;
}边栏推荐
- Notepad++ -- display related configurations
- HMS v1.0 appointment.php editid参数 SQL注入漏洞(CVE-2022-25491)
- Install pytoch geometric
- Configure cross compilation tool chain and environment variables
- Accidentally deleted the data file of Clickhouse, can it be restored?
- Flink1.13 SQL basic syntax (I) DDL, DML
- Compound nonlinear feedback control (2)
- 十二. golang其他
- 云原生架构实战案例及优化解决方案
- Programmers don't talk about morality, and use multithreading for Heisi's girlfriend
猜你喜欢
![[QT] create mycombobox click event](/img/5a/ed17567a71f6737891fc7a8273df0a.png)
[QT] create mycombobox click event

Configure cross compilation tool chain and environment variables

每周小结(*63):关于正能量

Actual cases and optimization solutions of cloud native architecture

Upper computer software development - log information is stored in the database based on log4net

JS扁平化数形结构的数组

注释与注解

19.Frambuffer应用编程

Uninstall Google drive hard drive - you must exit the program to uninstall

Letter meaning and parameter abbreviation of optical module Daquan
随机推荐
APScheduler如何设置任务不并发(即第一个任务执行完再执行下一个)?
How to use postman to realize simple interface Association [add, delete, modify and query]
(4) Canal multi instance use
left_and_right_net可解释性设计
BeanFactoryPostProcessor 与 BeanPostProcessor 相关子类概述
How to determine whether an array contains an element
复合非线性反馈控制(二)
The end of the Internet is rural revitalization
力扣(LeetCode)184. 部门工资最高的员工(2022.07.03)
C # character similarity comparison general class
Detectron:训练自己的数据集——将自己的数据格式转换成COCO格式
VB.net 调用FFmpeg简单处理视频(类库——6)
2022 a special equipment related management (elevator) examination questions simulation examination platform operation
509. 斐波那契数、爬楼梯所有路径、爬楼梯最小花费
Nexus 6p从8.0降级6.0+root
input显示当前选择的图片
JS arguments parameter usage and explanation
left_and_right_net正常版本
Talk about the SQL server version of DTM sub transaction barrier function
BUU-Pwn-test_ your_ nc