想问一下我这个这么写为什么在DEVc++上运行不出结果呀,我感觉逻辑没啥问题呀。
问题:求1+2!+3!+...+20!的和
#include
int cheng(int n){
int j;
while(n>0){
j=n*cheng(n-1);
}
return j;
}
int main(){
int i;
int sum=1;
for(i=2;i<=20;i++){
sum=sum+cheng(i);
}
printf("%d",sum);
}
因为你使用递归调用,但是递归函数没有出口。
递归函数必须要有一个出口。否则会一直走cheng()那个函数。
你读一下代码,当n=2时,程序就一直在cheng()出不去了。
你可以点个断点,单步执行运行看一看。
好好学,加油。
逻辑有问题,int cheng(int n)这个函数的while循环结束不了,n的值会一直大于0
首先,你在递归函数中,j 没有赋值初值,这样,当n>0不满足时,你的函数返回的 j 并不知道是什么,其次就用 2 的阶乘来举例, 你代码中当递归到最后的时候,返回一个不知道是什么的 j 然后,n 又满足了大于0 ,这样,无限循环,所以递归没有出口
我把你的代码递归部分重新写了一下,供你参考
#include<stdio.h>
int cheng(int n){
int j=1;
if (n==1) return j ;
else j=n*cheng(n-1);
}
int main(){
int i;
int sum=1;
for(i=2;i<=20;i++){
sum=sum+cheng(i);
}
printf("%d",sum);
}