1.递归和非递归分别实现求第n个斐波那契数。
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
//1.
//递归实现菲波那切数列
int fib(int num)
{
if (num<= 2)
return 1;
else
return fib(num - 1) + fib(num - 2);
}
//非递归实现
int fib(int n)
{
int first = 1;
int second = 1;
int third = 1;
while (n > 2)
{
third = first + second;
first = second;
second = third;
n--;
}
return third;
}
int main()
{
int n = 7;
int ret = 0;
ret = fib(n);
printf("ret=%d\n", ret);
system("pause");
return 0;
}
2.编写一个函数实现n^k,使用递归实现
int mypower(int n, int k)
{
if (k ==1)
return n;
else if (k ==0)
return 1;
else
return n*mypower(n, k - 1);
}
int main()
{
int n = 3;
int k = 3;
int ret = 0;
ret = mypower(n, k);
printf("ret=%d\n", ret);
system("pause");
return 0;
}
- 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
int DigitSum(int n)
{
int sum = 0;
int i = 0;
if (n!=0)
{
i = n % 10;
n = n / 10;
sum = i + DigitSum(n);
}
return sum;
}
int main()
{
int n = 1729;
printf("%d\n",DigitSum(n));
system("pause");
return 0;
}
- 编写一个函数reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中
的字符串操作函数。
//1
char* reverse_string(char * string)
{
char *p = string;
if (*p != '\0')
{
reverse_string(++string);
}
printf("%c", *p);
}
int main()
{
char *string = "abgccfnn5544";
reverse_string(string);
system("pause");
return 0;
}
//2
int mystrlen(const char*str)
{
if (*str == '\0')
return 0;
else
return 1 + mystrlen(str + 1);
}
char* reverse_string(char * str)
{
assert(str);
int len = 0;
len = mystrlen(str);
if (len > 1)
{
char tmp = str[0];
str[0] = str[len - 1];
str[len - 1] = '\0';
reverse_string(str + 1);
str[len - 1] = tmp;
}
return str;
}
int main()
{
char string[] = "abgccfnn5544";
reverse_string(string);
printf("%s", string);
system("pause");
return 0;
}
5.递归和非递归分别实现strlen
//5
//非递归实现
int mystrlen(const char*str)
{
int count = 0;
assert(str != NULL);
while (*str != '\0')
{
count++;
str++;
}
return count;
}
//递归实现
int mystrlen(const char*str)
{
if (*str == '\0')
return 0;
else
return 1 + mystrlen(str + 1);
}
int main()
{
char *p = "abcdefh";
int len = mystrlen(p);
printf("%d\n", len);
system("pause");
return 0;
}
6.递归和非递归分别实现求n的阶乘
//递归实现
int fac(int n)
{
if (n < 2)
return 1;
else
return n*fac(n - 1);
}
//非递归实现
int fac(int n)
{
int factorial = 1;
while (n > 1)
{
factorial *= n;
n--;
}
return factorial;
}
int main()
{
int n = 3;
int ret = 0;
ret = fac(n);
printf("ret=%d\n", ret);
system("pause");
return 0;
}
7.递归方式实现打印一个整数的每一位
void print(int n)
{
if (n > 9)
{
print(n / 10);
}
printf("%d\n", n % 10);
}
int main()
{
int n = 2675;
print(n);
system("pause");
return 0;
}