1.递归和非递归分别实现求第n个斐波那契数。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//非递归实现
int fib1(int n)
{
long num = 0;
int num1 = 1;
int num2 = 1;
if (n <= 2)
{
return num1;
}
while (n > 2)
{
num = num1 + num2;
num1 = num2;
num2 = num;
n--;
}
return num;
}
//递归的方式
int fib2(int n)
{
if (n <= 2)
{
return 1;
}
else
{
return fib2(n - 1) + fib2(n - 2);
}
}
int main()
{
int n = 0;
printf("请输入n:");
scanf("%d", &n);
printf("%d\n", fib2(n));
system("pause");
return 0;
}
2.编写一个函数实现n^k,使用递归实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int mypow(int n,int k)
{
int num = 0;
if (k == 0)
{
return 1;
}
else if (k == 1)
{
return n;
}
else
{
return n*mypow(n, k - 1);
}
}
int main()
{
int x = 0;
int y = 0;
printf("请输入底数和指数:");
scanf("%d%d", &x, &y);
printf("%d\n", mypow(x, y));
system("pause");
return 0;
}
- 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int DigitSum(int n)
{
int sum = 0;
int m = 0;
if (n != 0)
{
m = n % 10;
n = n / 10;
sum = m + DigitSum(n);
}
return sum;
}
int main()
{
int num = 0;
printf("请输入一个数字:");
scanf("%d", &num);
printf("%d\n", DigitSum(num));
system("pause");
return 0;
}
- 编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
char reverse_string(char* arr)
{
if (*arr == '\0')
{
printf("%c", *arr);
}
else
{
reverse_string(++arr);
printf("%c", *(--arr));
}
}
int main()
{
char arr[10] = { "" };
printf("请输入字符串(不超过10位):");
scanf("%s", &arr);
reverse_string(arr);
printf("\n");
system("pause");
return 0;
}
5.递归和非递归分别实现strlen
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//递归
int mystrlen1(char *arr)
{
int count = 0;
if (*arr != '\0')
{
arr++;
count = 1 + mystrlen1(arr);
}
return count;
}
//非递归
int mystrlen2(char* arr)
{
int count = 0;
while (*arr)
{
count++;
arr++;
}
return count;
}
int main()
{
char arr[]= {"abcdefgh"};
printf("%d\n", mystrlen2(arr));
system("pause");
return 0;
}
6.递归和非递归分别实现求n的阶乘
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//非递归
int fac(int n)
{
int i = 1;
int sum = 1;
if (n == 0)
{
return 1;
}
for (i = 1; i <= n; i++)
{
sum = sum * i;
}
return sum;
}
//递归
int fac1(int n)
{
int i = 1;
int sum = 1;
if (n == 0 || n == 1)
{
return sum;
}
else
{
return(n * fac1(n - 1));
}
}
int main()
{
int n = 0;
printf("请输入一个数字:");
scanf("%d", &n);
printf("%d! = %d\n",n,fac1(n));
system("pause");
return 0;
}
7.递归方式实现打印一个整数的每一位
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int myprint(int n)
{
if (n > 9)
{
myprint(n / 10);
}
printf("%d ", n % 10);
}
int main()
{
int n = 0;
printf("请输入一个整数:");
scanf("%d", &n);
myprint(n);
printf("\n");
system("pause");
return 0;
}