csdn每日一练——用递归求第n项值

1,2,4,2,3,6,12,6,3,....求第n项值
#include <stdio.h>
int fun(int n, int* x, int* y)//求n项值以及该值所处行列,*x表示第几行,*y表示第几列
{
    int sum = 0, i;//sum表示计算第i行及之前所有数的总数量(数据数量)
    int size = 0;
    int dd = 1;//下面说了:dd=*x,初始化,是之后计算具体数值的参数
    for (i = 1; i <= (*x); i++)//计算总的数据数量(包括所求数值所在行的整行数据)
    {
        sum += (2 * i - 1);
    }
    if (sum == n)//当该项位置与数据数量相同(即该数正好是每一行最后那个数)
    {
        *y = 2 * (*x) - 1;//此时该数的列数就是该行数据的个数
        return (*x);//返回行数
    }
    else if (sum > n)//当该项位置小于总数据量(就是该数不在行的末尾,在中间或开头)
    {
        (*y) = n - (sum - (2 * (*x) - 1));//用该数的序号n减去该数所在行前面行的所有数据数即得到此第n个数的列数
        size = 2 * (*x) - 1;
        dd = (*x);//每一行的初始值就是它的行标
        for (i = 2; i <= (*y); i++)//从第二行开始一直索引
            for (i = 2; i <= (*y); i++)//从第二列开始索引,想要求出每个数的数值
            {
                if (i <= (*x))//如果列数是小于行标的话,从该行的第二列开始,数值就是前一列的两倍(以改行第一列数值为基数)
                    dd *= 2;
                else
                    dd /= 2;//如果列数大于行标,数值就是第前一列的1/2
            }
        return dd;//返回第n个数的数值
    }
    else//当该项位置大于目前总数据量,行数增加,进入递归
    {
        (*x)++;
        return fun(n, x, y);
    }
}
int main()
{
    int n;
    int row = 1, col = 0;
    int val;
    row = 1;
    col = 0;
    printf("请输入n:");
    scanf_s("%d", &n);
    val = fun(n, &row, &col);//调用函数
    printf("第%d项是:%d\n", n, val);//输出第n项的数值
    return 0;
}

该数列规律:

(1) 1

(2) 2-4-2

(3) 3-6-12-6-3

(4) 4-8-16-32-16-8-4

(5) 5-10-20-40-80-40-20-10-5

代码中引入参数*x和*y表示行数和列数,同时*x还表示每行的首元素值

问题设置:

 选项设置:

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【问题描述】 【问题描述】编写函数f,功能是用递归的方法斐波那契数列的第n,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f出斐波那契数列的第n,并在主函数中输出。 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问题描述】编写函数f,功能是用递归的方法斐波那契数列的第n,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f出斐波那契数列的第n,并在主函数中输出。 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问题描述】编写函数f,功能是用递归的方法斐波那契数列的第n,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f出斐波那契数列的第n,并在主函数中输出。 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问题描述】编写函数f,功能是用递归的方法斐波那契数列的第n,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f出斐波那契数列的第n,并在主函数中输出。 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值