目录:
例1:分别使用递归和非递归求n的阶乘
方法一:递归
#include<stdio.h>
int Factorials(int x)
{
if (x < 2)
{
return 1;
}
return Factorials(x - 1) * x;
}
int main()
{
int a;
scanf_s("%d", &a);
printf("%d\n", Factorials(a));
return 0;
}
方法二:非递归
#include<stdio.h>
int Factorials(int x)
{
int result = 1;
for (int i = 1; i <= x; i++)
{
result *= i;
}
return result;
}
int main()
{
int a;
scanf_s("%d", &a);
printf("%d\n", Factorials(a));
return 0;
}
例2:分别使用递归和非递归实现strlen的模拟
方法一:递归
#include<stdio.h>
int MyStrlen(char* arr)
{
if (*arr == '\0')
{
return 0;
}
return MyStrlen(arr + 1) + 1;
}
int main()
{
char arr[] = "hello word";
printf("%d\n", MyStrlen(&arr));
return 0;
}
方法二:非递归
#include<stdio.h>
int MyStrlen(char* arr)
{
int count = 0;
while (*arr != '\0')
{
++count;
++arr;
}
return count;
}
int main()
{
char arr[] = "hello word";
printf("%d\n", MyStrlen(&arr));
return 0;
}
例3:计算一个数的每位之和
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
输入:1729,输出:19
方法一:递归
#include<stdio.h>
int DigitSum(int x)
{
if (x < 10)
{
return x;
}
return DigitSum(x / 10) + (x % 10);
}
int main()
{
int a;
scanf_s("%d", &a);
printf("%d\n", DigitSum(a));
return 0;
}
方法二:非递归
#include<stdio.h>
int DigitSum(int x)
{
int sum = 0;
//当只剩一位时/10为0结束循环
while (x > 0)
{
int x1 = x % 10;
sum += x1;
x = x / 10;
}
return sum;
}
int main()
{
int a;
scanf_s("%d", &a);
printf("%d\n", DigitSum(a));
return 0;
}
4.分别使用递归和非递归实现n的k次方
方法一:递归
#include<stdio.h>
int MyPow(int n, int k)
{
if (k == 0)
{
return 1;
}
return MyPow(n, k - 1) * n;
}
int main()
{
int n, k;
scanf_s("%d %d", &n, &k);
printf("%d\n", MyPow(n, k));
return 0;
}
方法二:非递归
#include<stdio.h>
int MyPow(int n, int k)
{
int i = 1;
int num = 1;
while (i <= k)
{
num = num * n;
++i;
}
return num;
}
int main()
{
int n, k;
scanf_s("%d %d", &n, &k);
printf("%d\n", MyPow(n, k));
return 0;
}