| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 561 人关注过本帖
标题:请各位指教一下我的编程
只看楼主 加入收藏
lsnpersist
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-10-31
结帖率:25%
收藏
已结贴  问题点数:20 回复次数:7 
请各位指教一下我的编程
我初学编程,真的很菜鸟,很多东西都不懂,希望大家不要见怪,虚心指教,小弟感激不尽。下面是我编的一个程序(其实是按照书本编的),主要是红色部分出问题,其实我是特意这样的,想看看效果(要从错误中吸取经验嘛)。请大家指出为什么这样不行。   题目是输出1-5的阶乘值
#include<iostream>
using namespace std;
int fac(int);
int main()
{int i;
for(i=1;i<=5;i++)
cout<<i<<"!="<<fac(i)<<endl;
return 0;
}
int fac(int n)
{static int fac(1)=1;    原来是f=1  f=f*n
fac(n)=fac(n-1)*n;

return f;
}
搜索更多相关主题的帖子: 指教 
2009-10-31 19:52
wghost
Rank: 2
等 级:论坛游民
帖 子:47
专家分:31
注 册:2009-6-6
收藏
得分:5 
你是想用递归?不是这样的吧,这样写试试
int fac(int n)
{
  static long  int m;
  if(n==1)
    m=1;
  else
    m=fac(n-1)*n;
return m;
}
2009-10-31 20:08
lsnpersist
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-10-31
收藏
得分:0 
回复 2楼 wghost
明白了,谢谢你
2009-10-31 20:13
最左边那个
Rank: 4
等 级:业余侠客
威 望:3
帖 子:97
专家分:201
注 册:2009-4-24
收藏
得分:5 
首先,乍一看,这return f,f是什么呢,你没有去定义,这里就出问题了!
另外这里fac(n)=fac(n-1)*n,你这是把一个函数赋给一个函数,用地址还好说,可你这里加了参数就不伦不类了,又会出问题!
你这句吧,static int fac(1)=1,首先没什么必要用到静态,另外你这起到什么作用了呢,你无非是想有个结束条件,可是你这样似乎起不到这样的作用,每次到fac(1),系统又去调用int fac(int),发现里面又有个定义static int fac(1)=1,又遇到fac(1),又调用自身,反反复复,所以就出问题了!

个人理解!
2009-10-31 20:14
最左边那个
Rank: 4
等 级:业余侠客
威 望:3
帖 子:97
专家分:201
注 册:2009-4-24
收藏
得分:5 
另外函数(加了参数)作为左式被赋值,慎用!


using namespace std;
int fac(int);
int main()
{int i;
for(i=1;i<=5;i++)
cout<<i<<"!="<<fac(i)<<endl;
return 0;
}
int fac(int n)
{
    if(n==1)
        return 1;
    else
        return n*fac(n-1);

}
2009-10-31 20:18
lsnpersist
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-10-31
收藏
得分:0 
版主说得很精辟,受教了。谢谢,以后一定多上论坛向各位大虾学习。
2009-10-31 20:21
lsnpersist
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-10-31
收藏
得分:0 
还有想向大家请教一下,返回值的具体过程是怎样的?  麻烦大家用版主的例子讲解一下当i=1和2时的整个过程  因为我不太懂(return f)的功能
2009-10-31 20:30
最左边那个
Rank: 4
等 级:业余侠客
威 望:3
帖 子:97
专家分:201
注 册:2009-4-24
收藏
得分:5 
当遇到  return ***  的时候,*** 可以代表一个数字,一个变量,或者一个式子。如果是式子的话,系统会运算到最简形式。

return 返回作用,比如有main函数里有句cout<<abc(6)<<endl; 当遇到abc(6)的时候,系统会去进入abc函数进行运算,如果函数算到最后是 m=5,return m.

那好,这时候遇到return了,就那执行顺序返回到cout<<abc(6)<<endl的调用点abc(6),而且还返回了abc(6)的结果值,使得原来的cout<<abc(6)<<endl变成cout<<5<<endl;
2009-10-31 22:57
快速回复:请各位指教一下我的编程
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025100 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved