| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 273 人关注过本帖
标题:递归函数可以用unsigned longlong fun(unsigned longlong)来声明吗
只看楼主 加入收藏
叶纤
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:135
专家分:141
注 册:2019-11-22
结帖率:100%
  已结贴   问题点数:20  回复次数:7   
递归函数可以用unsigned longlong fun(unsigned longlong)来声明吗
https://bbs.bccn.net/thread-498917-1-1.html
我用递归做这个题目因为我不确定可不可以用unsigned longlong fun(unsigned longlong)声明
只敢用int fun(int)声明,不过数字一输入大比如1-1000就运行的超慢的
#include<iostream>
using namespace std;
int a (int );//递归b-n公差为三的数字
int d(int);//递归b-n
int main()
{   int b;
    int n;
    n>b;//规定n到b的范围
    int count=0;
    cin >> b>>n;
    for(int i=1; i<=n; ++i)
    {   if(a(i)%3==1&&d(i)%3==1)//计算b-n不能被3整除的
        {   ++count;
        }
    }
    cout << n-count<< endl;//计算可以被三整除的
}
//13313313
int a (int n)//递归b-n公差为三的数字
{
    int t;
    //int count=0;
    //int countnum=0;
    if(n==1)
    {   t=1;
    }
    else
    {
        t=a(n-1)+3;
    }
    return t;
}
int d(int n)
{
    if(n!=0)
    {   d(n-1);
    }

    return n;
}
搜索更多相关主题的帖子: int unsigned fun 声明 递归 
2020-01-14 17:14
forever74
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:CC
等 级:贵宾
威 望:25
帖 子:1280
专家分:2216
注 册:2007-12-27
  得分:20 
首先,函数是可以声明为unsigned long long fun(unsigned long long);的。
其次,这和函数是否递归没有关系。
第三,循环能解决的问题,递归不能提高运行效率。
第四,由于栈空间无论大小,一定是很有限的,决定了递归层数不能过多。但是具体多少才是过多这个取决于硬件、操作系统、编译器和算法复杂程度。
第五,题外,楼主你要是感兴趣递归,就去琢磨一下汉诺塔、八皇后好了。

别人能不等于你能,别人不能不等于你不能
不要问别人能不能,要说:我能
2020-01-14 18:36
叶纤
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:135
专家分:141
注 册:2019-11-22
  得分:0 
突然感觉我的代码好啰嗦,改改,用for循环可以做到1 1000000000
#include<iostream>
using namespace std;
int main()
{int b;
    int n;
    n>b;//规定n到b的范围
    int count=0;
    cin >> b>>n;
    for(int i=1; i<=n; ++i)
    {if(i%3==1)
    {++count;}
    }
   cout << n-count<< endl;
return 0;
}
2020-01-14 18:43
叶纤
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:135
专家分:141
注 册:2019-11-22
  得分:0 
递归和for循环没区别啊,我都是当for循环用的,好像递归的内存大点
2020-01-14 18:45
叶纤
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:135
专家分:141
注 册:2019-11-22
  得分:0 
感觉用法差不多,就是比for循环多个步骤
#include<iostream>
using namespace std;
int d(int);//递归b-n
int main()
{   int b;
    int n;
    n>b;//规定n到b的范围
    int count=0;
    cin >> b>>n;
    for(int i=1; i<=n; ++i)
    {   if(d(i)%3==1)//计算b-n不能被3整除的
        {   ++count;
        }
    }
    cout << n-count<< endl;//计算可以被三整除的
}
int d(int n)
{
    if(n!=0)
    {   d(n-1);
    }
    return n;
}
2020-01-14 18:50
叶纤
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:135
专家分:141
注 册:2019-11-22
  得分:0 
谢谢大大,听你这讲解明白了,我以后会慎用递归的
2020-01-14 18:54
forever74
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:CC
等 级:贵宾
威 望:25
帖 子:1280
专家分:2216
注 册:2007-12-27
  得分:0 
算法书上说,尾递归可以等价改写为循环。那就是说,非尾递归不行。
所以让你理解一下汉诺塔,看看循环是怎么无能为力的。

别人能不等于你能,别人不能不等于你不能
不要问别人能不能,要说:我能
2020-01-14 19:26
叶纤
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:135
专家分:141
注 册:2019-11-22
  得分:0 
回复 7楼 forever74
谢谢大大,我尝试尝试写写汉诺塔
2020-01-14 19:37
快速回复:递归函数可以用unsigned longlong fun(unsigned longlong)来声明吗
数据加载中...
 
   



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

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