1、递归和非递归分别实现求第n个斐波那契数。
//递归方法计算第n个斐波那契数列的值
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int fib(int x)
{
int result = 0;
if (x > 2)
return result = fib(x - 1) + fib(x - 2);
else
return 1;
}
int main()
{
int n = 0;
scanf("%d", &n);
printf("%d", fib(n));
system("pause");
return 0;
}
//非递归(迭代循环)方法计算第n个斐波那契数列的值
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int fib(int x)
{
int a;
int b;
int c;
a = b = 1;
while (x > 2)
{
x -= 1;
c = b;
b = a;
a = c + b;
}
return a;
}
int main()
{
int n = 0;
scanf("%d", &n);
printf("%d", fib(n));
system("pause");
return 0;
}
2、编写一个函数实现n^k,使用递归实现 。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int mul(int n,int k)
{
if (k == 0)
return 1;
else if (k == 1)
return n;
else
return n * mul(n,k - 1);
}
int main()
{
int n = 0;
int k = 0;
scanf("%d%d", &n,&k);
printf("%d", mul(n,k));
system("pause");
return 0;
}
3、写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和。
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19 。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int DigitSum(n)
{
if (n>0)
{
return n % 10 + DigitSum(n / 10);
}
return 0;
}
int main()
{
int num = 0;
scanf("%d", &num);
printf("%d\n", DigitSum(num));
system("pause");
return 0;
}
4、编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void reverse_string(char * string)
{
if ('\0' != *(++string))
reverse_string(string);
printf("%c", *(string - 1));
}
int main()
{
char *a = "abcde";
printf("%s\n",a);
reverse_string(a);
printf("\n");
system("pause");
return 0;
}
5、递归和非递归分别实现strlen。
//递归实现strlen
#include<stdio.h>
#include<stdlib.h>
int mystrlen(char* string)
{
if (*string != '\0')
return 1 + mystrlen(string + 1);
else
return 0;
}
int main()
{
char string[] = "abcdefghijk";
int ret = mystrlen(string);
printf("%d\n", ret);
system("pause");
return 0;
}
//非递归实现strlen
#include<stdio.h>
#include<stdlib.h>
int mystrlen(char* string)
{
int count = 0;
while (*string != '\0')
{
count++;
string++;
}
return count;
}
int main()
{
char string[] = "abcdefghijk";
int ret = mystrlen(string);
printf("%d\n", ret);
system("pause");
return 0;
}
6、递归和非递归分别实现求n的阶乘 。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
int D_N(int n) //递归
{
if (n == 1)
{
return 1;
}
return n * D_N(n - 1);
}
int FD_N(int n) //非递归
{
int sum = 1;
for (; n > 0; n--)
{
sum *= n;
}
return sum;
}
int main()
{
int n = 0;
printf("请输入n:");
scanf("%d", &n);
int DS = 0;
int FDS = 0;
DS = D_N(n);
FDS = FD_N(n);
printf("递归结果:%d\n", DS);
printf("非递归结果:%d\n", FDS);
system("pause");
return 0;
}
7、递归方式实现打印一个整数的每一位。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>
void print(int n)
{
if (n>9)
{
print(n / 10);
}
printf("%d ", n % 10);
}
int main()
{
print(1234);
system("pause");
return 0;
}