0
点赞
收藏
分享

微信扫一扫

函数递归(及例题)

三千筱夜 2022-04-23 阅读 57
c语言

目录

🤞1.什么是函数递归

🤞1)递归定义

🤞2)递归主要思考方式(把大事化小)

🤞3)递归的优点

💕2.递归的两个必要条件

💕1)

💕2)

❤️3.习题介绍

❤️1) 打印一个整数的每一位 (递归实现)

❤️ 2)求n的阶乘 (递归实现)

❤️ 3) 字符串逆序 (递归实现)

❤️ 4) 计算一个数的每位之和 (递归实现)

❤️ 5) k的n次方 (递归实现)


1.什么是函数递归

1)递归定义

2)递归主要思考方式(把大事化小)

3)递归的优点

2.递归的两个必要条件

1)

2)

 

 

 

3.习题介绍

1) 打印一个整数的每一位 (递归实现)

题目:输入1234  输出 1 2 3 4

 代码如下:

#include <stdio.h>

void print(int n)
{
	if (n > 9)    //大于9是因为1/10 为0 条件为假 就不进if中
	{
		print(n / 10);
	}
	printf("%d ", n % 10);
}


int main()
{
	int n = 0;
	scanf("%d", &n);
	print(n);
	return 0;
}

运行结果

 

 2)求n的阶乘 (递归实现)

 首先我们要知道n的阶层怎么算,例如: 5!

 

 代码如下

#include <stdio.h>

int stratum(int n)
{
	if (n <= 2)      // 因为1和2 的阶层就是本身
		return n;
	else
		return n * stratum(n - 1);
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = stratum(n);
	printf("%d\n", ret);
	return 0;
}

运行结果

 3) 字符串逆序 (递归实现)

代码如下: 

#include <stdio.h>

void reverse_string(char* p)
{
	if (*p != '\0')
	{
		reverse_string(p + 1);  // p+1 是让指针与下一个值比较
	}
	printf("%c ", *p);
}

int main()
{
	char arr[] = "abcdef";
	reverse_string(arr);
	return 0;
}

运行结果:

 4) 计算一个数的每位之和 (递归实现)

 

代码如下:

#include <stdio.h>

int DigitSum(int n)
{
	while (n > 9)
	{
		return n % 10 + DigitSum(n / 10);  //这里就是以此记录每个取模结果,相加返回就行
	}
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = DigitSum(n);
	printf("%d\n", ret);
	return 0;
}

运行结果:

 5) k的n次方 (递归实现)

 既然k的n次方知道是n个k相乘,不如就

 代码如下:

#inluce <stdio.h>

int power(int k, int n)
{
	while (n > 0)
	{
		return k * power(k,n - 1); 
	}
}

int main()
{
	int n = 0;
	int k = 0;
	scanf("%d%d", &k, &n);
	int ret = power(k,n);
	printf("%d\n", ret);
	return 0;
}

运行结果:

 

 

举报

相关推荐

0 条评论