用C语言编写 用递归算法写程序,输入一个非负整数,输出这个数字的倒序数
时间: 2024-10-01 07:12:12 浏览: 6
在C语言中,你可以使用递归函数来实现将一个非负整数转换为其逆序数。下面是一个简单的示例,用于演示如何实现这一功能:
```c
#include <stdio.h>
// 递归函数,输入n,返回其逆序数
int reverse(int n) {
// 基本情况:当n小于等于0时,直接返回0
if (n <= 0)
return 0;
// 递归情况:将n的最后一位取出并乘以10的相应幂次,然后加上逆序剩余部分
int last_digit = n % 10; // 取得最后一位
int remaining = reverse(n / 10); // 递归调用处理去掉最后一位后的部分
return remaining * 10 + last_digit; // 返回结果
}
int main() {
int num;
printf("请输入一个非负整数:");
scanf("%d", &num);
if (num >= 0) { // 检查输入是否有效
int reversed_num = reverse(num);
printf("该数字的倒序数是:%d\n", reversed_num);
} else {
printf("输入错误,请输入非负整数。\n");
}
return 0;
}
```
当你运行此程序时,它会提示用户输入一个非负整数,然后将其逆序显示。
相关问题
C语言,编写递归算法,计算一个正整数有多少种拆分方法
可以使用递归算法来计算一个正整数的拆分方法数。以下是一个C语言实现的示例代码:
```c
#include<stdio.h>
int countPartitions(int n, int m) {
// 如果n或m都为1,则只有1种拆分方法
if (n == 1 || m == 1) {
return 1;
}
// 如果n < m,则拆分方法数与n相同
if (n < m) {
return countPartitions(n, n);
}
// 如果n == m,则拆分方法数加1
if (n == m) {
return 1 + countPartitions(n, m-1);
}
// 如果n > m,则拆分方法数等于不包含m的拆分方法数加上包含m的拆分方法数
return countPartitions(n, m-1) + countPartitions(n-m, m);
}
int main() {
int n;
printf("请输入一个正整数:");
scanf("%d", &n);
printf("%d的拆分方法数为:%d\n", n, countPartitions(n, n));
return 0;
}
```
在这个递归算法中,`countPartitions(n, m)`表示将正整数n拆分成不大于m的数的和的拆分方法数。如果n或m都为1,则只有1种拆分方法,因为只能拆分成1。如果n < m,则拆分方法数与n相同,因为不能拆分成比n还大的数。如果n == m,则拆分方法数加1,因为可以将n拆分成m和n-m两个数。如果n > m,则拆分方法数等于不包含m的拆分方法数加上包含m的拆分方法数。不包含m的拆分方法数等于`countPartitions(n, m-1)`,因为不能包含m。包含m的拆分方法数等于`countPartitions(n-m, m)`,因为可以将n拆分成m和n-m两个数。
在`main`函数中,读取用户输入的正整数n,并调用`countPartitions(n, n)`计算拆分方法数。
斐波拉契数列如下 1、1、2、3、5、8 编写程序,用户输入整数n,程序输出读数列的第n项.要求使用C语言递归算法。 输入 7 输出 13
以下是使用递归算法实现斐波那契数列的C语言代码:
```c
#include <stdio.h>
int fibonacci(int n) {
if (n <= 2) {
return 1;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
int main() {
int n;
printf("请输入斐波那契数列的项数:");
scanf("%d", &n);
printf("第%d项的值为%d\n", n, fibonacci(n));
return 0;
}
```
运行程序,输入7,输出结果为:
```
请输入斐波那契数列的项数:7
第7项的值为13
```