1.递归和非递归求第n个斐波那契数
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
// 递归
int Fibonacci(int n)
{
if (n <= 2)
{
return 1;
}
return Fibonacci(n - 2) + Fibonacci(n - 1);
}
int main()
{
int n = 0;
printf("请输入想要求第几个斐波那契数:");
scanf("%d", &n);
printf("%d\n", Fibonacci(n));
system("pause");
return 0;
}
/* 非递归
int main()
{
int a = 1;
int b = 1;
int n = 0;
int i = 0;
int num = 0;
printf("请输入想要求第几个斐波那契数:");
scanf("%d", &n);
for (i = 3; i <= n; ++i)
{
num = a + b;
a = b;
b = num;
}
printf("第%d个斐波那契数是:%d\n", n,num);
system("pause");
return 0;
}
*/
2.函数递归求n的k次方
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int Power(int n, int k)
{
if (n == 1 || k == 0)
{
return 1;
}
else
{
return (n * Power(n, k - 1));
}
}
int main()
{
int n = 0;
int k = 0;
printf("请输入n和k的值:");
scanf("%d%d", &n, &k);
printf("%d\n", Power(n, k));
system("pause");
return 0;
}
3.递归实现非负整数各位加法
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int DigitSum(unsigned int num)
{
int sum = 0;
int temp = 0;
if (num > 0)
{
temp = num % 10;
num = num / 10;
sum = temp + DigitSum(num);
}
return sum;
}
int main()
{
unsigned int number = 0;
printf("请输入一个非负整数:");
scanf("%d", &number);
printf("%d\n", DigitSum(number));
system("pause");
return 0;
}
4.字符串中的字符反向排列
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
void reverse_string(char * string)
{
if ('\0' != *(++string))
{
reverse_string(string);
}
printf("%c", *(string - 1));
}
int main()
{
char arr[] = "abcdefg";
reverse_string(arr);
printf("\n");
system("pause");
return 0;
}
5.递归和非递归分别实现strlen
//递归算法
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int string_len(char * string)
{
if ('\0' != *string)
{
return (1 + string_len(++string));
}
else
{
return 0;
}
}
int main()
{
char arr[] = "abcdefg";
printf("原字符串是:%s\n", arr);
int temp = 0;
temp = string_len(arr);
printf("strlen=%d\n", temp);
system("pause");
return 0;
}
//非递归算法
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int string_len(char * string)
{
int i = 0;
int sum = 0;
for (i = 0; string[i] != '\0'; ++i)
{
sum++;
}
return sum;
}
int main()
{
char arr[] = "abcdef";
printf("原字符串是:%s\n", arr);
int temp = 0;
temp = string_len(arr);
printf("strlen=%d\n", temp);
system("pause");
return 0;
}
6.递归和非递归分别实现求n的阶乘
//递归算法
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int factorial(int n)
{
if (n > 1)
{
return (n * factorial(n - 1));
}
else if (n == 0)
{
return 0;
}
else
{
return 1;
}
}
int main()
{
int n = 0;
int temp = 0;
printf("请输入一个整数:");
scanf("%d", &n);
temp = factorial(n);
printf("阶乘是:%d\n", temp);
system("pause");
return 0;
}
//非递归算法
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int factorial(int n)
{
int i = 0;
for (i = n-1; i >= 1; --i)
{
n = n * i;
}
return n;
}
int main()
{
int n = 0;
int temp = 0;
printf("请输入一个整数:");
scanf("%d", &n);
temp = factorial(n);
printf("阶乘是:%d\n", temp);
system("pause");
return 0;
}
7.递归方式实现打印一个整数的每一位
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
void print(int n)
{
if (n > 9)
{
print(n / 10);
}
printf("%d ", n % 10);
}
int main()
{
int number = 0;
printf("请输入一个整数:");
scanf("%d", &number);
print(number);
printf("\n");
system("pause");
return 0;
}