注册 登录
编程论坛 C++教室

递归问题

longeww 发布于 2010-10-31 17:02, 618 次点击
下面这个程序是求n!,在fun()函数里实现,但是当我输入5时,为什么没输出,请各位大侠帮帮忙,先谢过了
#include<iostream>
using namespace std;

int n;
int fun(int n);
int main()
{
   int k=0,m=0;
   cout<<"请输入要求的数值:"<<endl;
   cin>>k;
   if((k==1)||(k==0))
          m=1;
   else if(k>1)
       m=fun(k);
  cout<<k<<"!="<<m<<endl;
   return 0;
   
}
int fun(int n)
{
    int k=0;
   
    k=n*fun(n-1);
   
   
    return k;
}
8 回复
#2
m21wo2010-10-31 17:49
程序代码:

#include<iostream>
using namespace std;

int n;
int fun(int n);
int main()
{
   int k=0,m=0;
   cout<<"请输入要求的数值:"<<endl;
   cin>>k;
   if((k==1)||(k==0))
          m=1;
   else if(k>1)
       m=fun(k);
  cout<<k<<"!="<<m<<endl;
   return 0;
  
}
int fun(int n)
{
   if(n==1)    //一个递归都要有出口
       return 1;
   else
      return n*fun(n-1);
}
#3
pangding2010-10-31 19:55
呵呵,属于初学者的惯常错误。
摆脱初学的表现就是写的时候虽然还是忘了,但一发现是死循环很快能自己查出错误~~
#4
2010-10-31 22:17
这个递归的一定要if的语句吗,我看C语言的递归都是用if当做控制是否到头了,
不知道还有其他的不。
#5
ljt2010-11-01 17:10
其实递归和循环差不多,都要有一个条件限制的,别弄成无线循环了


[ 本帖最后由 ljt 于 2010-11-1 17:14 编辑 ]
#6
sunmingchun2010-11-01 22:56
lz没有结束递归的条件。2楼是正确的。
#7
南国利剑2010-11-02 01:22
同意二楼的看法
#8
无名可用2010-11-02 16:22
这个递归的一定要if的语句吗,我看C语言的递归都是用if当做控制是否到头了,
不知道还有其他的不。
    呵呵,递归的关键还是函数调用自身,也就是一个问题可以分为若干个子问题,而每一个子问题的解决方法又与原问题一致,此时就可以用到递归了。
    书上的例子仅是最简单的递归调用形式,当然这种形式可以被循环取代。但有些问题的解决方法递归特征非常明显,就可以用递归来解决这些问题。像扫雷中当点击一个非雷的方块时,四周的非雷方块也会自动显示出来。。不要被书本上的形式所束缚。哈哈,以上只是个人的愚见。
#9
longeww2010-11-02 22:55
回复 2楼 m21wo
太感谢了,我又学到了一点知识
1