递归计算斐波那契数
// 求第n个斐波那契 递归
//1 1 2 3 5 8 13 21
int Fib(int n)
{
if (n<=2)
return 1;
else
return Fib(n - 1) + Fib( n - 2);
}
//非递归
int Fib(int n)
{
int a = 1;
int b = 1;
int c = 1;
while (n >= 3)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
int main()
{
int n;
scanf("%d", &n);
int ret = Fib(n);
printf("%d\n",ret);
return 0;
}
递归实现n的k次方
思路:Pow(n,k)有三种情况
1.k > 0 n * Pow(n,k-1)
2.k = 0 1
3.k < 0 1.0/Pow(2,-k)
double Pow(int n,int k)
{
if (k > 0)
return n * Power(n, k - 1);
else if
return 1;
else
return 1.0/Pow(n,-k);
}
int main()
{
int n = 0;
int k = 0;
scanf("%d %d", &n,&k);
int ret = Pow(n,k);
printf("%d\n", ret);
return 0;
}
递归实现一个数的每位之和
思路:写一个函数DigitSum(n)
DigitSum(1729)
DigitSum(172) +9
DigitSum(17)+2 +9
DigitSum(1)+7+2 +9
int DigitSum(unsigned int n)
{
if (n > 9)
{
DigitSum(n / 10);
return DigitSum(n / 10) + n % 10;
}
else
return n;
}
int main()
{
unsigned int n = 0;
scanf("%d", &n);
int ret = DigitSum(n);
printf("%d", ret);
return 0;
}
递归实现字符串逆序
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
#include <stdio.h>
#include <string.h>
//非递归
//void reverse_string(char s[])
//{
//size_t len = strlen(s);
//size_t left = 0;
//size_t right = len - 1;
//while (left<right)
//{
// char tmp = s[left];
// s[left] = s[right];
// s[right] = tmp;
// left++;
// right--;
//}
//}
//递归
void reverse_string(char s[])
{
size_t len = strlen(s);
char tmp = s[0];
s[0] = s[len - 1];
s[len - 1] = '\0';
if (strlen(s+1)>=2)
reverse_string(s + 1);
s[len - 1] = tmp;
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
递归实现strlen的模拟
size_t My_strlen(char* str)
{
if (*str == '\0')
return 0;
else
return 1 + My_strlen(str+1);
}
//非递归
//size_t My_strlen(char* str)
//{
// size_t count = 0;
// while (*str != '\0')
// {
// count++;
// str++;
// }
// return count;
//}
int main()
{
char arr[] = "abc";
size_t len = My_strlen(arr);
printf("%zd\n", len);
return 0;
}
递归求阶乘
#include <stdio.h>
//递归
//int Fac(int n)
//{
// if (n <= 1)
// return 1;
// else
// return n* Fac(n - 1);
//}
int Fac(int n)
{
int i = 0;
int x = 1;
for ( i = 1; i <= n; i++)
{
x = i * x;
}
return x;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Fac(n);
printf("%d\n", ret);
return 0;
}
递归方式实现打印一个整数的每一位
void Print(int n)
{
if (n > 9)
Print(n / 10);
printf("%d ", n % 10);
}
int main()
{
int num = 0;
scanf("%d", &num);
Print(num);
return 0;
}