求1!+2!+3!+...+n!的结果
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int func1(int n)
{
if (input <= 1)
return 1;
else
return n * multiply(n - 1);
}
void main()
{
int n;
int result = 0;
scanf("%d", &n);
for (int i = n; i > 0; --i)
{
result += func1(i);
}
printf("%d", result);
}
求第n个斐波那契数列的数
从后往前递推
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int math(int n)
{
if (n <= 2)
return 1;
else
return math(n - 2) + math(n - 1);
}
void main()
{
int n = 0;
scanf("%d", &n);
printf("%d", math(n));
}
假如输入50
改进:逆向思维从前往后递推
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int Fib(int n)
{
int a = 1, b = 1, c = 0;
for (n; n > 2; --n)
{
c = a + b;
a = b;
b = c;
}
return c;
}
void main()
{
int n = 0;
scanf("%d", &n);
printf("%d", Fib(n));
}
汉诺塔问题
void move(char m, char n)
{
printf("%c-->%c\n", m, n);
}
//A为起始位置,B为辅助位置,C为目标位置
void hanoi(int n, char A, char B, char C)
{
if (n == 1)
move(A,C);
else
{
hanoi(n - 1, A, C, B);
//从A位置将n-1个盘子通过C拿到B
move(A,C);
//将A位置第n个盘子拿到C
hanoi(n - 1, B, A, C);
//将B位置的n-1个盘子通过A拿到C
}
}
void main()
{
int n = 0;
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');
}