www.rtmj.net > 递归求阶乘的问题

递归求阶乘的问题

n的阶乘,就是从1开始乘到n,即1*2*3**(n-1)*n.即n!=1*2*3**(n-1)*n.而(n-1)!=1*2*3**(n-1).所以可以得出,n!=(n-1)! * n.由这个概念,可以得出递归求阶乘函数fact的算法:1 如果传入参数为0或1,返回1;2 对于任意的n,返回n*fact(n-1).代码如下:int fact(int n){ if(n == 0 || n == 1) return 1; return n*(fact(n-1));}

求n的阶乘时终止条件的判断if(n==1)时返回1的话,求0!就变成没有定义了.

#include <stdio.h> #include <stdlib.h> unsigned int jiecheng(unsigned int n) { unsigned int i; unsigned long sum = 1; for (i = 1; i <= n; i++) sum *= i; return sum; } int main(void) { unsigned int n; char temp[200]; printf("请输入N: "); scanf(

#include <stdio.h>int rf(int n){ return n > 0 ? n * rf(n-1) : 1;}int f(int n){ int k = 1; while(n > 0) k *= n--; return k;}int main(){ int n; scanf("%d", &n); printf("递归:%d\n", rf(n));printf("非递归:%d\n", f(n));}

/*当 n 为0或1时,n!=1;否则n!=n*(n-1)! */int fun(int n){ if (n 追问: *当 n 为0或1时,n!=1;否则n!=n*(n-1)! */ //当为0或1时,n不等于1?否则,n不等于n乘以(n-1)不等于?什么意思呢???int fun(int n){ if (n 追答: || 是或,只要

第一个return求的是n>1时的阶乘,这样一层一层地找下去,处理递归并返回结果.第二个return前面省略了else,也就是当不满足n>1这个条件时执行的,是判断递归的边界,返回的是1的阶乘的答案,如果没有这个return,递归就没有边界,一直进行下去,就会造成栈溢出.PS:我也是刚学,说的可能不是很好,希望对你有帮助!

#include <stdio.h>int fac(int n){ if(n>1) return n*fac(n-1); return 1;}int main(){ int n; scanf("%d",&n); // input n printf("%d\n",fac(2*n+1)); return 0;} 直接敲的,有bug自己调一下哈哈哈^_^

double f(double n) { if(n==0||n==1) return 1; else return n*f(n-1); } double类型的函数,return 1,;返回值是整型,不太合适吧

#include double fun(int n); int main(void) { int n; printf("Enter n:"); scanf("%d",&n); printf("%lf\n",fun(n)); return 0; } double fun(int n) { if(n==0||n==1) return 1; else return n*fun(n-1); } 程序调用自身称为递归( recursion).它通常把一个大型复

思路分析:n! = n*(n-1)! // n的阶乘可以化为n乘以(n-1) 的阶乘,这就是递归 当n=0或1时,n! = 1 // 这就是递归终止条件 实现算法程序:double fun(int n) // 递归函数求n的阶乘 { if(n==0 || n==1) // 递归终止条件 return 1; else return n*fun(n-1); // 进行递归运算 }

网站地图

All rights reserved Powered by www.rtmj.net

copyright ©right 2010-2021。
www.rtmj.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com