标题:递归函数可以用unsigned longlong fun(unsigned longlong)来声明吗
只看楼主
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册: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: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:20 
首先,函数是可以声明为unsigned long long fun(unsigned long long);的。
其次,这和函数是否递归没有关系。
第三,循环能解决的问题,递归不能提高运行效率。
第四,由于栈空间无论大小,一定是很有限的,决定了递归层数不能过多。但是具体多少才是过多这个取决于硬件、操作系统、编译器和算法复杂程度。
第五,题外,楼主你要是感兴趣递归,就去琢磨一下汉诺塔、八皇后好了。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-01-14 18:36
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册: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: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
递归和for循环没区别啊,我都是当for循环用的,好像递归的内存大点

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-14 18:45
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册: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: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
谢谢大大,听你这讲解明白了,我以后会慎用递归的

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-14 18:54
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
算法书上说,尾递归可以等价改写为循环。那就是说,非尾递归不行。
所以让你理解一下汉诺塔,看看循环是怎么无能为力的。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-01-14 19:26
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
回复 7楼 forever74
谢谢大大,我尝试尝试写写汉诺塔

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-14 19:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-498926-1-1.html




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

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