文章目录
递归方式实现打印一个整数的每一位
#include <stdio.h>
void print(unsigned int n)
{
if (n < 10)
printf("%u ", n);
else
{
print(n / 10);
print(n % 10);
}
}
int main()
{
unsigned int n = 0;
scanf("%d", &n);
print(n);
return 0;
}
递归和非递归分别实现求n的阶乘(不考虑溢出的问题)
//1.递归
#include <stdio.h>
int Fac(int n)
{
if (n == 1)
return 1;
else
{
return n*Fac(n-1);
}
}
int main()
{
int n = 0;
scanf("%d", &n);
printf("%d\n", Fac(n));
return 0;
}
//非递归
#include <stdio.h>
int main()
{
int n = 0;
int fac = 1;
scanf("%d", &n);
if (n == 1)
fac = 1;
while (n > 1)
{
fac = n * fac;
n--;
}
printf("%d\n", fac);
return 0;
}
递归和非递归分别实现strlen
//1.递归
#include <stdio.h>
int my_strlen(char* str)
{
if (*str != '\0')
{
return my_strlen(++str) + 1;
}
return 0;
}
int main()
{
char arr[] = "abcdef";
printf("%d\n", my_strlen(&arr));
return 0;
}
//2.非递归
#include <stdio.h>
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char str[] = "acedfb";
printf("%d\n", my_strlen(&str));
return 0;
}
字符串逆序(递归实现)
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
void reverse_string(char* string)
{
int tmp = *string;
int len = my_strlen(string);
*string = *(string + len - 1);//注意:不要忘了括号
*(string+len-1)= '\0';
if(my_strlen(string+1))//条件是换了两边之后,中间的字符串
{
reverse_string(string + 1);
}
*(string + len - 1) = tmp;
}
int main()
{
char arr[] = "abcdefg";
int len=my_strlen(arr);
reverse_string(arr);
for (int i = 0; i < len; i++)
{
printf("%c", arr[i]);
}
return 0;
}
计算一个数的每位之和(递归实现)
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
输入:1729,输出:19
#include<stdio.h>
unsigned int DigitSum(unsigned int n)
{
int sum = 0;
if (n > 9)
sum = DigitSum(n / 10) + DigitSum(n % 10);
else
sum = n;
return sum;
}
int main()
{
unsigned int n = 0;
scanf("%u", &n);
printf("%u", DigitSum(n));
return 0;
}
递归实现n的k次方
编写一个函数实现n的k次方,使用递归实现。
#include <stdio.h>
int Power(int n, int k)
{
int i = 0;
int power = 1;
for (i = 1; i <= k; i++)
{
power = n*power;
}
return power;
}
int main()
{
int n = 0;
int k = 0;
scanf("%d %d", &n, &k);
printf("%d的%d次方为%d\n",n,k,Power(n, k));
return 0;
}
计算斐波那契数
递归和非递归分别实现求第n个斐波那契数
例如:
输入:5 输出:5
输入:10, 输出:55
输入:2, 输出:1
//递归
#include<stdio.h>
int Fib(int n)
{
if (n == 1 || n == 2)
return 1;
else
return Fib(n - 1) + Fib(n - 2);
}
int main()
{
int n = 0;
scanf("%d", &n);
printf("%d\n", Fib(n));
return 0;
}
//2.非递归
#include <stdio.h>
int main()
{
int a = 1;
int b = 1;
int fib = 1;
int n = 0;
scanf("%d", &n);
if (n == 1 | n == 2)
fib = 1;
while (n > 2)//5
{
fib = a + b;
a = b;
b = fib;
n--;
}
printf("%d\n", fib);
return 0;
}