1.递归和非递归分别实现求第n个斐波那契数。
2.编写一个函数实现n^k,使用递归实现
3. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
4. 编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
5.递归和非递归分别实现strlen
6.递归和非递归分别实现求n的阶乘
7.递归方式实现打印一个整数的每一位
//1.递归和非递归分别实现求第n个斐波那列数
#include<stdio.h>
#include<Windows.h>
//递归
int fib1(int n)
{
if (n <= 2)
return 1;
else
return fib1(n - 1) + fib1(n - 2);
}
//非递归
int fib2(int n)
{
int first;
int second;
int third;
first = second = 1;
while (n > 2)
{
third = first + second;
first = second;
second = third;
n--;
}
return third;
}
int main()
{
int res1 = fib1(40);
int res2 = fib2(40);
printf("%d %d\n", res1,res2);
system("pause");
return 0;
}
//2.编写一个函数实现n^k,使用递归实现
#include<stdio.h>
#include<Windows.h>
#pragma warning(disable:4996)
int pow(int n, int k)
{
if (k == 0)
{
return 1;
}
else if (k == 1)
{
return n;
}
else
{
return n * pow(n, k - 1);
}
}
int main()
{
int n = 0;
int k = 0;
int res = 0;
printf("请输入n和k的值:");
scanf("%d %d", &n,&k);
res=pow(n, k);
printf("%d\n", res);
system("pause");
return 0;
}
//3. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
//例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19
#include<stdio.h>
#include<Windows.h>
#pragma warning(disable:4996)
int DigitSum(int n)
{
int sum = 0;
if (n != 0)
{
sum= n%10+DigitSum(n/10);
}
return sum;
}
int main()
{
int n = 0;
scanf("%d", &n);
int sum=DigitSum(n);
printf("sum=%d\n", sum);
system("pause");
return 0;
}
//4. 编写一个函数 reverse_string(char * string)(递归实现)
//实现:将参数字符串中的字符反向排列。
//要求:不能使用C函数库中的字符串操作函数。
#include<stdio.h>
#include<Windows.h>
void reverse_string(char * str)
{
if (*str != '\0')//当条件不成立时,跳出if,输出\0前面的字母,再跳出这个递归
{
reverse_string(str + 1);
}
printf("%c", *(str - 1));
}
int main()
{
char* str = "abcdef";
reverse_string(str);
system("pause");
return 0;
}
//5.递归和非递归分别实现strlen
#include<stdio.h>
#include<Windows.h>
//非递归
int strlen1(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
//递归
int strlen2(char* str)
{
if (*str != '\0')
{
return 1 + strlen2(str + 1);
}
else
{
return 0;
}
}
int main()
{
char *str = "abcdef";
int ret1=strlen1(str);
int ret2 = strlen2(str);
printf("非递归:%d\n", ret1);
printf("递归:%d\n", ret2);
system("pause");
return 0;
}
//6.递归和非递归分别实现求n的阶乘
#include<stdio.h>
#include<Windows.h>
#pragma warning(disable:4996)
//递归
int fact1(int n)
{
if (n <= 1)
return 1;
else
return n * fact1(n - 1);
}
//非递归
int fact2(int n)
{
int result = 1;
while (n > 1)
{
result *= n;
n--;
}
return result;
}
int main()
{
int n=0;
scanf("%d", &n);
int ret1=fact1(n);
int ret2 = fact1(n);
printf("递归:%d\n", ret1);
printf("非递归:%d\n", ret2);
system("pause");
return 0;
}
//7.递归方式实现打印一个整数的每一位
#include<stdio.h>
#include<Windows.h>
#pragma warning(disable:4996)
void print(int num)
{
if (num > 9)
{
print(num / 10);
}
printf("%d ", num % 10);
}
int main()
{
int num;
scanf("%d", &num);
print(num);
system("pause");
return 0;
}