1.斐波那契数列
#include <stdio.h>
//递归
int Fibonacci(int n)
{
if (n == 1 || n == 2)
{
return 1;
}
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
//非递归
int Fibonacci(int n)
{
int i = 0;
int a = 1;
int b = 1;
int c = 0;
if (n == 1 || n == 2)
{
return 1;
}
else
{
for (i = 2; i < n; i++)
{
c = a + b;
b = a;
a = c;
}
return c;
}
}
int main()
{
int n = 7;
int ret = 0;
ret = Fibonacci(n);
printf("%d\n", ret);
return 0;
}
2.求一个数的n次方
#include <stdio.h>
int Pow(int n, int k)
{
if (0 == k)
{
return 1;
}
if (k > 0)
{
return n * Pow(n, k - 1);
}
return n;
}
int main()
{
int n = 2;
int k = 5;
int ret = 0;
ret = Pow(n, k);
printf("%d\n", ret);
return 0;
}
3.求一个数每一位数之和
#include <stdio.h>
int DigitSum(int n)
{
if (n > 10)
{
return n % 10 + DigitSum(n / 10);
}
return n % 10;
}
int main()
{
int n = 1729;
int ret = 0;
ret = DigitSum(n);
printf("%d\n", ret);
return 0;
}
4.strlen函数的递归和非递归写法
#include <stdio.h>
int My_strlen(const char *str)
{
int i = 0;
int count = 0;
for (i = 0; *str; i++)
{
count++;
str++;
}
return count;
}
int My_strlen(const char *str)
{
if (*str != '\0')
{
return 1 + My_strlen(++str);
}
return 0;
}
int main()
{
char str[] = "abcde";
printf("%d\n", My_strlen(str));
return 0;
}
5.将一个字符串逆置
#include <stdio.h>
#include <assert.h>
char *reverse_string(char *str)
{
assert(str != NULL);
int n = 0;
char *p = str;
char *q = p;
char tmp = 0;
while (*p != '\0')
{
p++;
n++;
}
if (n > 1)
{
tmp = *q;
*q = *(p - 1);
*(p - 1) = '\0';
reverse_string(q + 1);
*(p - 1) = tmp;
}
return q;
}
int main()
{
char str[] = "abcdef";
printf("%s\n", str);
printf("%s\n", reverse_string(str));
return 0;
}
6.求一个数的阶乘
#include <stdio.h>
int Fac(int n)
{
if (n > 1)
{
return n * Fac(n - 1);
}
return 1;
}
int Fac(int n)
{
int i = 0;
int ret = 1;
for (i = 1; i <= n; i++)
{
ret *= i;
}
return ret;
}
int main()
{
int n = 5;
int ret = 0;
ret = Fac(n);
printf("%d\n", ret);
}
7.打印一个数的每一位
#include <stdio.h>
void Print(int n)
{
if (n >= 10)
{
Print(n / 10);
}
printf("%d ", n % 10);
}
int main()
{
int n = 1024;
Print(n);
printf("\n");
return 0;
}
注意:递归写法虽然清晰简单,但多次调用函数,使用过多的内存空间,若递归层数比较深,应改写非递归算法。