前言:
内容:
n的阶乘的公式,什么情况,怎么没有听懂
我咋知道n的阶乘公式啊
就是这个,老师说知道n的阶乘公式就容易写递归函数了,算了没阿关系
n!(fac(n))
1 ,n<=1
n*fac(n-1)
计算n的阶乘 ,循环的方式
int fac(int n)
{if(n <= 1)return 1;elsereturn n*fac(n-1);} int main()
{int n = 0;scanf("%d", &n);int ret = fac(n);printf("%d", ret);return 0;}
可以用循环的方式写
int main()
{int n = 0;int i = 0;int ret = 1;scanf("%d", &n);for(i=1; i <= n; i++){ret = ret * i;}printf("%d", ret);return 0;
}
用函数的方式写递归,主要写功能
很奇怪,就是主函数里的for循环里的变量,出了作用域还没有失效,就是出了for循环,他还将值带出来了,难道我对作用域了解的还是不够清楚,在去了解一下
int fac(int n)
{int i = 0; //将功能所用到的变量都初始化 int ret =1;for(i=1; i <= n; i++) //这就是功能里的变量,然后就是要初始化这里的 {ret = ret * i;} return ret;
}
斐波那契数列,这个我还不知道是什么意思
就是求数列,不晓得,麻烦,就是猜解一个数字,直到那个数字为1,或者是2,2就是1,
然后把1全部加起来
这里需要考虑的是,就是自定义函数定义的count,如果要打印的话,这个就需要是全局变量,但是放到主函数,自定义函数又找不到,所以就放到了最上面
用递归的方法表示为
#include <stdio.h>int count = 0;
//利用递归求解斐波那契数列
int Fib(int n)
{if(n ==3)count++;if(n<=2)return 1;elsereturn Fib(n-1) + Fib(n-2);} int main()
{int n = 0;scanf("%d", &n);int relt = Fib(n);printf("%d\n", relt);printf("%d\n", count);return 0;}
用迭代的方式解决斐波那契数列
就是有一定的规律的
1 1 2 3 5 8 13 21 34 55
a b c //第一次a b c //第二次,就是需要把上面的的b赋值到a,然后c赋值到b//然后加起来,就是第二次的c了,然后反复循环就可以了
就是钱前两个数加起来的和,就是后面的数了
也就是说前面两个数是确定的,然后就是c = a+b
然后就需要改变a,b的值,
用的for循环,好像也可以,都是从3开始的,然后就是3循环1次,4循环两次
int Fib(int n)
{int i = 0;int a = 1;int b = 1;int c = 0;for(i = 3; i <= n; i++){c = a+b;a = b;b = c;}return c;
}int main()
{int n = 0;scanf("%d", &n);int m = Fib(n);printf("%d", m);return 0;
}