|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
用递归算法计算n!
- #include "stdio.h"
- long fact(int n)
- { long f;
- if(n==1) f=1;
- else f=n*fact(n-1); /*此处的fact(n-1)有点不太懂*/
- return f;
- }
- void main()
- { long y;int n;
- scanf("%d",&n);
- y=fact(n);
- printf("%d!=%d\n",n,y);
- }
复制代码
此处fact(n-1)怎么个递归法,逻辑有点乱,求助!!!!
本帖最后由 jackz007 于 2021-12-15 21:58 编辑
- #include <stdio.h>
- unsigned long long fact(int n)
- {
- return (n > 1) ? n * fact(n - 1) : 1LL ;
- }
- int main(void)
- {
- unsigned long long y ;
- int n ;
- scanf("%d" , & n) ;
- printf("%d! = %I64u\n" , n , fact(n)) ;
- }
复制代码
以计算 fact(5) 为例,分析递归过程
- fact(5) = 5 * fact(4)
- fact(4) = 4 * fact(3)
- fact(3) = 3 * fact(2)
- fact(2) = 2 * fact(1)
- fact(1) = 1
复制代码
fact(5) = 5 * fact(4) = 5 * 4 * fact(3) = 5 * 4 * 3 * fact(2) = 5 * 4 * 3 * 2 * fact(1) = 5 * 4 * 3 * 2 * 1
|
|